2016-10-13 67 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