2010-09-14 94 views
0

我想在网格中嵌套网格。
要填充最内层的网格,我需要来自网格的直接父代和网格父代的父代的KeyValue。
我怎样才能从外面最父母检索MasterRowKeyValue?
我有嵌套像这样3个网格:aspxgridview从父类获得MasterRowKeyValue

<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被称为用于第一详细网格,我设置选择参数默认值是这样的:

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

在大多数内(该第二)嵌套网格,我需要将我的一个参数设置为最外层网格的MasterRowKeyValue。
喜欢的东西:

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

如何实现这一目标?

回答

2

如果您确定处理的详细信息的主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(); 
    } 
0

另一种可能的版本

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(); 
    }