2010-09-14 55 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(); 
    }