2016-10-13 54 views
0

我有一个主网格和细节网格,细节网格允许我更新和删除,但它不刷新。如果我更新两次或删除两次,它将删除,否则当我展开主网格时,更新数据将显示在详细网格中。我在这里使用CallBackPanel。我如何刷新细节网格?Master-Detail Gridview Devexpress

<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> 

+0

加入的代码太多,不会吸引。具体 –

+0

不是我的专业。但你可以开始赏金。这将帮助你。 –

+0

请查看此[解决方案](http://stackoverflow.com/questions/21299016/how-to-refresh-or-show-immediately-in-datagridview-after-inserting)它解决了您正在寻找的问题 –

回答

0

见这个例子:https://www.devexpress.com/Support/Center/Example/Details/E3578

基本上这个想法是,您需要处理详细网格的EndCallback客户端事件并使用ClientInstanceName更新主网格:grdMasterBuilding.Refresh()。

所以,你必须添加以下行的细节网格标记的<列前>元素:

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

然后在提到的例子只是在OnEndCallback将添加这些JS OnBeginCallback和OnEndCallback方法,如使用您的主网格ClientInstanceName来刷新它。

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

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

HTH