代码之家  ›  专栏  ›  技术社区  ›  WebDude

aspxgridview从父级获取MasterRowKeyValue

  •  0
  • WebDude  · 技术社区  · 14 年前



    如何从最外层的父级检索MasterRowKeyValue?
    我有3个网格嵌套如下:

    <dxwgv:ASPxGridView ID="gridParents" runat="server" ObjectDataSource="odsParents" KeyFieldName="ParentId">
     <SettingsDetail ShowDetailRow="true" />
     <Columns>
      <dx:GridViewDataColumn FieldName="ParentIdId" Visible="false" />
      <dx:GridViewDataColumn FieldName="Title" />
     </Columns>
     <Templates>
      <DetailRow>
       <dxwgv:ASPxGridView ID="gridParentsChilren" runat="server" ObjectDataSource="odsParentsChildren" KeyFieldName="ChildId" OnBeforePerformDataSelect="gridParentsChilren_DataSelect">
        <SettingsDetail ShowDetailRow="true" IsDetailGrid="true" />
        <Columns>
         <dx:GridViewDataColumn FieldName="ChildId" Visible="false" />
         <dx:GridViewDataColumn FieldName="Title" />
        </Columns>
        <Templates>
         <dxwgv:ASPxGridView ID="gridParentsChilrenRoles" runat="server" ObjectDataSource="odsParentsChildrenRoles" KeyFieldName="RoleId" OnBeforePerformDataSelect="gridParentsChilrenRoles_DataSelect">
          <SettingsDetail ShowDetailRow="true" IsDetailGrid="true" />
          <Columns>
           <dx:GridViewDataColumn FieldName="RoleId" Visible="false" />
           <dx:GridViewDataColumn FieldName="Title" />
          </Columns>
         </dxwgv:ASPxGridView>
        </Templates>
       </dxwgv:ASPxGridView>
      </DetailRow>
     </Templates>
    </dxwgv:ASPxGridView>
    <asp:ObjectDataSource id="odsParents" runat="server" SelectMethod="GetParents" />
    <asp:ObjectDataSource id="odsParentsChildren" runat="server" SelectMethod="GetParentsChildren">
     <SelectParameters>
      <asp:Parameter Name="parentid" Type="Object" />
     </SelectParameters>
    </asp:ObjectDataSource>
    <asp:ObjectDataSource id="odsParentsChildrenRoles" runat="server" SelectMethod="GetParentsRoles">
     <SelectParameters>
      <asp:Parameter Name="childid" Type="Object" />
      <asp:Parameter Name="parentid" Type="Object" />
     </SelectParameters>
    </asp:ObjectDataSource>
    

    当为第一个细节网格调用OnBeforePerformDataSelect时,我将select parameters DefaultValue设置为:

    odsParentsChildren.SelectParameters["parentid"].DefaultValue = ((ASPxGridView)sender).GetMasterRowKeyValue().ToString();
    


    比如:

    odsParentsChildrenRoles.SelectParameters["childid"].DefaultValue = ((ASPxGridView)sender).GetMasterRowKeyValue().ToString();
    odsParentsChildrenRoles.SelectParameters["parentid"].DefaultValue = ((ASPxGridView)sender).Master.GetMasterRowKeyValue().ToString();
    

    2 回复  |  直到 14 年前
        1
  •  2
  •   DevExpress Team    14 年前

    如果您确定已处理细节的主ASPxGridView实例,则可以执行此操作。这可以使用以下代码完成:

    protected void ASPxGridView1_BeforePerformDataSelect(object sender, EventArgs e) {
            ASPxGridView subDetail = sender as ASPxGridView;
            GridViewDetailRowTemplateContainer container = subDetail.NamingContainer as GridViewDetailRowTemplateContainer;
            ASPxGridView detail = container.Grid;
            odsParentsChildrenRoles.SelectParameters["parentid"].DefaultValue = detail.GetMasterRowKeyValue();
        }
    
        2
  •  0
  •   Tomino    11 年前

    protected void gvMyGridView_BeforePerformDataSelect(object sender, EventArgs e)
        {
            var gvMyGridView = sender as ASPxGridView;
            var parentRow = gvMyGridView.NamingContainer as GridViewDetailRowTemplateContainer;
            odsChildDataSource.SelectParameters["Id"].DefaultValue = parentRow .KeyValue.ToString();
        }