2011-12-28 7 views
2

DevExpress master-detail ASPxGridView?で詳細グリッドの選択された行にアクセスする方法は誰でも説明できますan example on the devexpress support websiteしかし、私はそれを得ることができませんork、私はDevExpressのバージョン11で働いています。ASPxGridView - マスター/ディテールGridViewの詳細グリッドで選択した行を取得する方法

ありがとうございます。

+0

詳細グリッドで選択した行を取得するイベントはどれですか? – Akhil

+0

詳細グリッドのSelectionChanged()イベントで使用することをお勧めしますが、実際にそのイベントを使用することはできません。 –

+0

正確には機能しないのは何ですか?イベントが発生していないか、または...?コードを投稿できますか? – Filip

答えて

3

ディテールグリッドの選択行を取得する方法が見つかりましたが、この方法で「アドバイス」しても問題はありませんが、細かいところではonload()イベントをディテールグリッドに追加してからそれをASPxGridViewにキャストすることによって、グリッドビューのそのインスタンスにアクセスすることができました。ここで

は私のコードは、詳細グリッドである:

<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 Webフォームの現在のバージョンの最新ではないので、私はちょうど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> 

お知らせ私はクリックで行選択を使用しますが、チェックボックスを使用して別の変形もあります。だから、あなたがしなければならないのは、セレクションイベントハンドラをコードの背後に実装することだけです。

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; 
} 
関連する問題