Master-Detail Gridview Devexpress

本文关键字:Devexpress Gridview Master-Detail | 更新日期: 2023-09-27 18:12:47

我有一个主网格和详细网格,详细网格允许我更新和删除,但它不刷新。如果我更新两次或删除两次,它正在删除,或者当我展开主网格时,更新的数据显示在详细网格中。我在这里使用CallBackPanel。如何刷新详细网格?

<dx:ASPxCallbackPanel runat="server" ID="CallbackPanel"
 ClientInstanceName="CallbackPanel" OnCallback="CallbackPanel_Callback">
    <PanelCollection>
        <dx:PanelContent ID="PanelContent3" runat="server">
            <dx:ASPxGridView ID="grdMasterBuilding"
                ClientInstanceName="grdMasterBuilding" 
                runat="server" KeyFieldName="BuildingId" AutoGenerateColumns="False">
                <Columns>
                    <dx:GridViewDataTextColumn 
                        FieldName="Name" Caption="Building Name"/>
                    <dx:GridViewDataTextColumn                             
                        FieldName="Description" Caption="Building Description">
                </Columns>
                <Templates>
                    <DetailRow>
                        <dx:ASPxGridView ID="grdDetailBuilding" 
                            ClientInstanceName="grdDetailBuilding" runat="server" 
                            KeyFieldName="FloorId" AutoGenerateColumns="False"
                            <Columns>
                                <dx:GridViewDataTextColumn   
                                    FieldName="FloorCode" Caption="Floor Code">
                                <dx:GridViewDataTextColumn> 
                                <dx:GridViewDataTextColumn 
                                    FieldName="FloorLength" Caption="Floor Width" />
                                </dx:GridViewDataTextColumn>
                                <dx:GridViewDataTextColumn 
                                    FieldName="FloorHeight" Caption="Floor" />
                                </dx:GridViewDataTextColumn>
                                <dx:GridViewDataComboBoxColumn
                                    FieldName="FloorType" Caption="Floor Type" />
                                </dx:GridViewDataComboBoxColumn>
                                <dx:GridViewDataComboBoxColumn
                                    FieldName="DeliveryOption" VisibleIndex="9" 
                                    Caption="Delivery Option" />
                                </dx:GridViewDataComboBoxColumn>
                                <dx:GridViewDataTextColumn
                                    FieldName="NumbersOfUnits" Caption="No Of Units"
                                </dx:GridViewDataTextColumn>
                                <dx:GridViewDataTextColumn
                                    FieldName="SquareFeet" Caption="Square Feet" 
                                </dx:GridViewDataTextColumn>        
                            </Columns> 
                        </dx:ASPxGridView>
                    </DetailRow>
                </Templates>
                <SettingsDetail ShowDetailRow="true" />
            </dx:ASPxGridView>
        </dx:PanelContent>
    </PanelCollection>

Master-Detail Gridview Devexpress

请看下面的例子:https://www.devexpress.com/Support/Center/Example/Details/E3578 .

基本的想法是,你需要处理EndCallback客户端事件的细节网格和更新主网格使用ClientInstanceName: grdMasterBuilding.Refresh()。

所以你必须在元素:

<ClientSideEvents EndCallback="OnEndCallback" BeginCallback="OnBeginCallback"/>

然后添加这些JS OnBeginCallback和OnEndCallback方法,就像上面提到的例子一样,在OnEndCallback中,你将使用你的主网格ClientInstanceName来刷新它。

function OnEndCallback(s, e) {
   if ((command == "ADDNEWROW" || command == "UPDATEEDIT") && !s.isError) {
      grdMasterBuilding.Refresh();
   }
}

如果你不需要在子网格编辑/删除时更新主网格,尝试用同样的方式刷新子网格,通过使用grdDetailBuilding.Refresh()。注意,示例在OnBeginCallback期间保存动作命令名称,然后检查命令是否为ADDNEWROW或UPDATEEDIT。您可能需要为删除操作添加检查。我不确定是否会调用UPDATEEDIT来删除行,也许有一个单独的命令。你可以通过使用浏览器开发工具并在OnBeginCallback的断点处停止。

HTH