asp.Net NamingContainerプロパティを使用してGridView行番号を取得する方法

1391 ワード

DropDoweListはbuttonと異なりCommandNameを指定できないため、通常の方法で行のインデックスを取得することはできません.苦労したあげく、NamingContainerプロパティで問題を解決したことがわかりました.
まず、マイクロソフトのこの属性の説明を見てみましょう.
----------------------------------
サーバーコントロールの名前付きコンテナへの参照を取得します.この参照は、同じControlを持つことを区別するために一意の名前付き空間を作成します.ID属性値のサーバコントロール.
ASP.NET Webアプリケーションの各ページには、コントロールの階層が含まれています.この階層は、コントロールがユーザーに表示されるUIを生成するかどうかとは関係ありません.指定されたコントロールの名前付きコンテナは、階層内のコントロールの上にある親コントロールであり、この親コントロールはINamingContainerインタフェースを実装します.このインタフェースを実装するサーバコントロールは、サブサーバコントロールのID属性値に一意のネーミングスペースを作成します.
RepeaterやDataListサーバコントロールなどのリストWebサーバコントロールに対してデータバインディングを行う場合、サーバコントロールに一意のネーミングスペースを作成することが特に重要です.データ・ソース内の複数のアイテムがサーバー・コントロールの複数のインスタンスを作成し、サーバー・コントロールが重複コントロールのサブレベルである場合、ネーミング・コンテナは、これらのサブコントロールの各インスタンスが競合しないUniqueID属性値を持っていることを確認します.ページのデフォルトのネーミングコンテナは、ページを要求するときに生成されるPageクラスのインスタンスです.
このプロパティを使用して、特定のサーバコントロールが存在する名前付きコンテナを決定できます.
----------------------------------
特に最後の一言.
SelectedIndexChangedイベントのコードの概要を次に示します.
 
  
DropDownList ddl = (DropDownList)sender;
GridViewRow gvr = (GridViewRow)ddl.NamingContainer;
int id = int.Parse(GridView1.DataKeys[gvr.RowIndex][0].ToString());
int num = int.Parse(ddl.Text);

トリガイベントを取得するための最初の文のDropDownListコントロール.
2番目の文では、コントロールのNamingContainerプロパティを使用して、コンテナ、つまりGridViewオブジェクトを取得します.
これがあれば、他のものは通常の使い方で、問題は解決します.