2011-12-28 24 views
2

任何人都可以解释我如何访问DevExpress master-detail ASPxGridView?中的一个细节网格选定的行我发现an example on the devexpress support website但我无法得到它拖曳ork,我正在与DevExpress的版本11。ASPxGridView - 如何获取主/从GridView的详细网格中的选定行?

在此先感谢。

+0

您希望在哪个事件中获取详细网格中的选定行? – Akhil 2011-12-28 07:00:52

+0

最好在细节网格的SelectionChanged()事件中,但我甚至无法从我的代码中访问我的细节网格,所以我无法真正使用该事件。 – 2011-12-28 07:09:15

+0

究竟什么不行?事件没有触发或...?你能发布你的代码吗? – Filip 2011-12-28 07:55:59

回答

3

我找到了一种方法来获取选定的细节网格的行,不知道如何“建议”这样做,但它对我来说工作正常,我添加了一个onload()事件到细节网格,然后我能够通过将其转换为ASPxGridView来访问该GridView的实例。

这里是我的代码,详细格子:

<Templates> 
      <DetailRow> 

       <dx:ASPxGridView ID="detailGrid" runat="server" DataSourceID="SqlDataSource2" 
        Width="100%" OnBeforePerformDataSelect="detailGrid_DataSelect" 
         KeyFieldName="InvoiceID" 
         EnableCallBacks="False" 
         onload="detailGrid_Load" 
          > 

,然后我处理onoad()事件是这样的:

ASPxGridView gridView; 
protected void detailGrid_Load(object sender, EventArgs e) 
{ 

    gridView = sender as ASPxGridView; 
    gridView.SelectionChanged += new EventHandler(gridView_SelectionChanged); 

} 

所以我做了详细的电网的ASPxGridView实例,现在我可以利用它的SelectionChanged()事件。

private static int invoiceID; 

    void gridView_SelectionChanged(object sender, EventArgs e) 
    { 
     invoiceID = Convert.ToInt64(gridView.GetSelectedFieldValues("InvoiceID")[0]); 
    } 
0

在此先感谢user189756答案,因为它是有用的,但是我想很多人正在进入同一个问题在这里和因为以前的答案是不是最新的,因为它的DevExpress Asp.Net的WebForms的当前版本几乎是5年前写的,我只想在这里增加一个重要的观点。 为了处理选择事件在服务器端,现在你必须ASPxGridView属性如下指定:

<dx:ASPxGridView ID="MainGrid" runat="server"> 
    <Columns> 
     <!-- Grid Columns here --> 
    </Columns> 
    <Templates> 
     <DetailRow> 
      <dx:ASPxGridView ID="DetailGrid" runat="server" KeyFieldName="ID" OnInit="Grid_Init" OnSelectionChanged="Grid_SelectionChanged"> 
       <Columns> 
        <!-- Grid Columns here --> 
       </Columns> 
       <!-- Now the following code is relevant to process Selection Event on Server Side--> 
       <SettingsBehavior AllowFocusedRow="true" 
        AllowSelectByRowClick="true" 
        ProcessFocusedRowChangedOnServer="true" 
        ProcessSelectionChangedOnServer="true"/> 
       <SettingsDetail IsDetailGrid="True" /> 
      </dx:ASPxGridView> 
     </DetailRow> 
    </Templates> 
    <SettingsDetail ShowDetailRow="True" /> 
</dx:ASPxGridView> 

通知我使用点击行选择,但也有使用复选框另一种变体。所以现在唯一要做的就是在后面的代码中实现Selection Event Handler。

protected void Grid_SelectionChanged(object sender, EventArgs e) 
{ 
    ASPxGridView grid = sender as ASPxGridView; 
    for (int i = 0; i < grid.VisibleRowCount; i++) // Loop through selected rows 
    { 
     if (grid.Selection.IsRowSelected(i)) // do whatever you need to do with selected row values 
     { 
// now use pre-initialized List<object> selectedList to save 
      selectedList.Add(Convert.ToInt32(grid.GetRowValues(i, "ID"))); 
     } 
    } 
    ViewState["SelectedList"] = selectedList; 
} 
相关问题