You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Acumatica的Aspx中声明主从结构PXGrid?

实现Acumatica主从PXGrid关联(ASPX配置指南)

我经常帮开发者配置Acumatica里的主从网格展示,这个需求其实非常典型——核心就是利用Acumatica的数据视图关联机制,配合PXGrid的同步属性来实现主行选中后子网格自动加载关联数据。下面我给你详细拆解ASPX里的配置步骤,以及关键注意点:

1. 先确认BLC里的数据视图关联(前提)

首先要确保你的BLC里两个数据视图已经建立了正确的主从关联:

  • 主数据视图(比如ParentView):基于父表,要包含主键字段
  • 子数据视图(比如ChildView):通过父表的主键关联,写法类似:
    public PXSelect<ChildTable, Where<ChildTable.parentID, Equal<Current<ParentTable.parentID>>>> ChildView;
    

这个关联是基础,ASPX的配置要依赖这个关联逻辑。

2. ASPX中主网格的配置

主网格需要允许用户选择行,并且要明确绑定主数据视图。示例代码如下:

<px:PXGrid ID="gridParent" runat="server" DataSourceID="ds" SkinID="Details" Width="100%"
    AllowSelect="True" SyncPosition="True">
    <Levels>
        <px:PXGridLevel DataMember="ParentView">
            <Columns>
                <!-- 这里添加父表需要展示的字段 -->
                <px:PXGridColumn DataField="ParentID" KeyField="True" />
                <px:PXGridColumn DataField="ParentName" />
                <!-- 其他字段... -->
            </Columns>
        </px:PXGridLevel>
    </Levels>
    <AutoSize Container="Window" Enabled="True" />
</px:PXGrid>

关键属性说明:

  • AllowSelect="True":必须开启,允许用户选中行
  • SyncPosition="True":标记这个网格是主同步源
  • KeyField="True":给主键字段加上这个标记,确保Acumatica能正确识别当前选中的记录

3. ASPX中子网格的配置

子网格的核心是绑定子数据视图,并且设置SyncPosition指向主网格的ID,这样就能自动同步主网格的选中状态,加载关联数据。示例代码:

<px:PXGrid ID="gridChild" runat="server" DataSourceID="ds" SkinID="Details" Width="100%"
    SyncPosition="gridParent">
    <Levels>
        <px:PXGridLevel DataMember="ChildView">
            <Columns>
                <!-- 这里添加子表需要展示的字段 -->
                <px:PXGridColumn DataField="ChildID" KeyField="True" />
                <px:PXGridColumn DataField="ChildName" />
                <px:PXGridColumn DataField="ParentID" />
                <!-- 其他字段... -->
            </Columns>
        </px:PXGridLevel>
    </Levels>
    <AutoSize Container="Window" Enabled="True" />
</px:PXGrid>

关键属性说明:

  • SyncPosition="gridParent":指定子网格要同步主网格(ID为gridParent)的选中位置,主行切换时自动刷新子网格数据
  • 子数据视图ChildView必须在BLC里关联主视图的Current记录,这样才能过滤出对应子条目

4. 额外优化建议

  • 如果希望页面加载时默认选中主网格的第一行,可以在BLC的Initialize或者RowSelected事件里设置主视图的Current记录:
    protected void Page_Init(object sender, EventArgs e)
    {
        if (ParentView.Select().FirstOrDefault() != null)
        {
            ParentView.Current = ParentView.Select().FirstOrDefault();
        }
    }
    
  • 可以给子网格开启AutoRefresh="True",确保数据更新时能自动刷新
  • 如果需要更复杂的过滤逻辑,可以在BLC的子视图RowSelecting事件里自定义过滤条件

这样配置后,当你选中主网格的任意记录,子网格就会自动加载所有关联的子条目,完美实现主从展示的需求。

内容的提问来源于stack exchange,提问作者RuslanDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:21:09