主从网格视图 Devexpress
Master-Detail Gridview Devexpress
我有一个主网格和一个细节网格,细节网格允许我更新和删除但它不刷新。如果我更新两次或删除两次,它就是删除,否则当我展开主网格时,更新的数据将显示在详细信息网格中。我在这里使用 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>
看这个例子: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();
}
}
如果您不需要在子网格 edit/delete 上更新主网格,请尝试使用 grdDetailBuilding.Refresh() 以相同的方式仅刷新子网格。请注意,该示例在 OnBeginCallback 期间保存操作命令名称,然后检查该命令是 ADDNEWROW 还是 UPDATEEDIT。您可能需要为删除操作添加检查。我不确定是否会调用 UPDATEEDIT 来删除行,也许有一个单独的命令。您可以通过使用浏览器开发人员工具并在 OnBeginCallback 中的断点处停止来了解这一点。
HTH
我有一个主网格和一个细节网格,细节网格允许我更新和删除但它不刷新。如果我更新两次或删除两次,它就是删除,否则当我展开主网格时,更新的数据将显示在详细信息网格中。我在这里使用 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>
看这个例子: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();
}
}
如果您不需要在子网格 edit/delete 上更新主网格,请尝试使用 grdDetailBuilding.Refresh() 以相同的方式仅刷新子网格。请注意,该示例在 OnBeginCallback 期间保存操作命令名称,然后检查该命令是 ADDNEWROW 还是 UPDATEEDIT。您可能需要为删除操作添加检查。我不确定是否会调用 UPDATEEDIT 来删除行,也许有一个单独的命令。您可以通过使用浏览器开发人员工具并在 OnBeginCallback 中的断点处停止来了解这一点。
HTH