- - PR -
DataGridに配置したDropDownListの、DataGrid内の行位置を取得したい。
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-07-26 16:56
お世話になっております。
早速ですが、表題の件について何方かご教授願います。 現在、VS.NET2003のC#でWebアプリの開発を行っています。 DataGridのItemTemplateにDropDownListを追加して表示させていますが、 DropDownListの選択内容はSelectedIndexChangedイベントを追加することで取得できたのですが、 同じイベント内でSelectedIndexChangedイベントが発生したDropDownListが配置されているDataGridの 行番号の取得方法が分かりません。 似たような事をやっている過去ログは見つけたのですが、それをDropDownListに適用する事が出来ていない状態です。 (http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=19002&forum=7) イベントの追加方法とイベントの内容は以下の通りです。 <ItemTemplate> <asp:DropDownList id=Dropdownlist2 runat="server" DataMember="Dropdown" DataSource="<%# dataSet11 %>" OnSelectedIndexChanged="DropDownList2_SelectedIndexChanged" AutoPostBack="True" DataValueField="value" DataTextField="text"> </asp:DropDownList> </ItemTemplate> protected void DropDownList2_SelectedIndexChanged(object sender, System.EventArgs e) { this.dataSet11 = (DataSet1)ViewState["dataset11"]; DropDownList dl = (DropDownList)sender; string vl = dl.SelectedValue; // ここ以降でDataGridの行番号を取得したい。 } 宜しくお願いします。 | ||||
|
投稿日時: 2005-07-26 17:39
DropDownList から Parent を 1個(か 2個:忘れたけど)たどると
DataGridItem クラスにあたるはずなので、 これの ItemIndex を参照すればいいかと思います。 未検証ですが、
のような感じかと。 | ||||
|
投稿日時: 2005-07-26 17:41
td があって tr があるから 2個か。
じゃ、
| ||||
|
投稿日時: 2005-07-26 18:19
にしざき様
回答ありがとうございます。 早速試した結果、想定通りの内容を取得する事が出来ました。 この方法は他でも使うことがあると思いますので、念のためお聞きしたいのですが、 ・DataGridをWebで表示するとTableとして表示される と言う前提から、 <table> ←DropDownListの二つ上のParentがここ <tr> ←DropDownListの一つ上のParentがここ <td></td> ←ここに対象のDropDownListがある </tr> <table> と言うことで、DropDownListを含むDataGridが ((DataGridItem)dl.Parent.Parent) となるのですよね? ※((DataGridItem)dl.Parent.Parent).ItemIndexと記述すると、DataGridのイベントが走る訳でもないのにどうしてItemIndexが設定されているのか?と言うところはまだ理解できていませんが・・・ | ||||
|
投稿日時: 2005-07-26 18:35
正確には
DataGrid -DataGridItem --なにか(忘れました) ---DropDownList というオブジェクト関連があって、 それぞれが(たまたま) table -tr --td or th ---select を描画することになります。 一般には HTML の構造からは ASP.NET の親子関係を直接には 導けないのですが、今回の場合はこれを覚えていたのでそこから 逆算したためにあんな書き方になっていました。 後段については、ViewState から構造を復元する際に ItemIndex が設定されることになります。 | ||||
|
投稿日時: 2005-07-26 19:08
にしざき様
早速の回答ありがとうございます。 にしざき様の回答を元に勉強してみます。 | ||||
|
投稿日時: 2005-07-26 19:56
Parent.Parent と決めうちせず、DataGridItem まで上位を探す方がいいかと。
で、それを public shared なメソッドにしておく、と。 _________________ | ||||
|
投稿日時: 2005-07-26 20:00
<table>
<tr> ←DropDownListの二つ上のParentがここ <td> ←DropDownListの一つ上のParentがここ <select></select> ←対象のDropDownList </td> </tr> <table> 対象のDropDownListがr行c列にあるとすると dl.Parentの実体は MyDataGrid.Items[r].Cells[c] dl.Parent.Parentの実体はMyDataGrid.Items[r] [ASP.NET]DataGridコントロールの各セルにアクセスするには? http://www.atmarkit.co.jp/fdotnet/dotnettips/064dgcell/dgcell.html [ メッセージ編集済み 編集者: todo 編集日時 2005-07-26 20:01 ] [ メッセージ編集済み 編集者: todo 編集日時 2005-07-26 20:10 ] |