- PR -

DataGridのヘッダのテンプレートについて

1
投稿者投稿内容
チャチャ
常連さん
会議室デビュー日: 2003/10/13
投稿数: 42
投稿日時: 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 」

そのヘッダーのテキストボックスに入力しているデータをアクセスするのはできたのですが、
データをセットするのはできなかった。

よろしくお願いします。
masas
常連さん
会議室デビュー日: 2002/05/23
投稿数: 25
投稿日時: 2004-03-12 13:23
ヘッダーはItemsじゃ取れないですよね。
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2004-03-12 13:29
試してないけど
TextBox abc = (TextBox)e.Item.FindControl("year");
abc.Text = "2004";
でうごきませんか?


あとItemDataBoundイベントで処理したほうがいいかもしれません
チャチャ
常連さん
会議室デビュー日: 2003/10/13
投稿数: 42
投稿日時: 2004-03-12 15:32
ゆうじゅんさんへ

  なるほど、ItemDataBoundイベントで処理する方法が考えてなかった。

  ゆうじゅんさんが言った通りに書き直したら、うまく行きました。
ありがとうございました、いい勉強になりました。
  
masas
常連さん
会議室デビュー日: 2002/05/23
投稿数: 25
投稿日時: 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";
}
チャチャ
常連さん
会議室デビュー日: 2003/10/13
投稿数: 42
投稿日時: 2004-03-12 16:43
masas さんへ
 
 masasさんの回答がありがとう、一度試してみたいと思っていますので、
今後ともよろしくお願いします
1

スキルアップ/キャリアアップ(JOB@IT)