- - PR -
DataGridのヘッダのテンプレートについて
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-03-11 15:53
いつもお世話になります
DataGridのヘッダーにテンプレートのTextBoxを配置しました、 やりたいことはDataGridをバインドする後、そのTextBoxにある値をセットしたいのです。 ソースコードは以下を示す ----------------------------------------------------------------------- public void DataGrid_ItemCreated(object sender,DataGridItemEventArgs e) { if(e.Item.ItemType == ListItemType.Header) { TextBox abc = (TextBox)DataGrid1.Items[e.Item.ItemIndex].FindControl("year"); abc.Text = "2004"; } ------------------------------------------------------------------------- しかし、サーバーエラーが以下のように発生しました 「インデックスが範囲を超えています。負でない値で、コレクションのサイズよりも小さくなければなりません。パラメータ名 : index 」 そのヘッダーのテキストボックスに入力しているデータをアクセスするのはできたのですが、 データをセットするのはできなかった。 よろしくお願いします。 |
|
投稿日時: 2004-03-12 13:23
ヘッダーはItemsじゃ取れないですよね。
|
|
投稿日時: 2004-03-12 13:29
試してないけど
TextBox abc = (TextBox)e.Item.FindControl("year"); abc.Text = "2004"; でうごきませんか? あとItemDataBoundイベントで処理したほうがいいかもしれません |
|
投稿日時: 2004-03-12 15:32
ゆうじゅんさんへ
なるほど、ItemDataBoundイベントで処理する方法が考えてなかった。 ゆうじゅんさんが言った通りに書き直したら、うまく行きました。 ありがとうございました、いい勉強になりました。 |
|
投稿日時: 2004-03-12 15:42
簡単なサンプルを書いてみました。
tb1はヘッダーに入れたとき、tb2はフッターに入れたとき。 DataGridが作られたときにセットするのであれば、ゆうじゅんさんが言っているようにItemDataBoundでやるのがスマートです。 ↓の方法は、別のイベントでコントロールを取得する方法です。 (自分が知らなかったので作ってみた) TextBox tb1 = DataGridEx1.Controls[0].Controls[1].FindControl("header_text1") as TextBox; if (tb1 != null) { tb1.Text = "2004"; } TextBox tb2 = DataGridEx1.Controls[0].Controls[DataGridEx1.Controls[0].Controls.Count - 2].FindControl("footer_text1") as TextBox; if (tb2 != null) { tb2.Text = "2004"; } |
|
投稿日時: 2004-03-12 16:43
masas さんへ
masasさんの回答がありがとう、一度試してみたいと思っていますので、 今後ともよろしくお願いします |
1