aspxgridview получить MasterRowKeyValue от родителя - PullRequest
0 голосов
/ 14 сентября 2010

Я пытаюсь вложить сетку в сетку.
Для заполнения самой внутренней сетки мне нужно KeyValue как от прямого родителя гридов, так и от родителя родителя гридов.
Как я могу получить 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 вызывается для первой Детальной сетки, я устанавливаю параметры выбора DefaultValue следующим образом:

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 ]

2 голосов
/ 15 сентября 2010

Это можно сделать, если вы определите главный экземпляр 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 голосов
/ 29 мая 2014

Другая возможная версия

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