- PR -

DataGridのTemplateの値の取得方法

1
投稿者投稿内容
つち
会議室デビュー日: 2006/01/19
投稿数: 4
投稿日時: 2006-01-19 23:08
はじめまして。
ASP.NETを最近はじめまして色々調べたのですが解らないので
教えてください。

DataGridにTemplateを配置し、ItemTemplateにLabelとCheckBoxを配置しました。
CheckBoxがtrueの場合のみlabelの値を取得して処理したいのですが、うまく取得する
ことが出来ません。

ItemTemplateに配置したLabelの値を取得方法をお教えください。
よろしくお願いします。
lalupin4
大ベテラン
会議室デビュー日: 2004/07/26
投稿数: 163
投稿日時: 2006-01-19 23:32
 こういう話か?


コード:
foreach(DataGridItem item in this.grid.Items)
{
    if (item.ItemType == ListItemType.Item)
    {
        CheckBox check = row.Cells[0].Controls[0] as CheckBox;
        if(check.Checked)
        {
            Label label = row.Cells[0].Controls[1] as Label;
            string text = label.Text;
        }
    }
}

lalupin4
大ベテラン
会議室デビュー日: 2004/07/26
投稿数: 163
投稿日時: 2006-01-19 23:46
 一応解説。

 ASP.NET DataGridのオブジェクトモデルはとどのつまり
<table>にレンダリングされるんだから
行→列(セル)→その中身、だ。
そのまんまなんで比較的わかりやすい。
ただし、ヘッダーとかフッターとかは別テンプレートなので除けること。
つち
会議室デビュー日: 2006/01/19
投稿数: 4
投稿日時: 2006-01-20 08:08
lalupin4さんありがとうございます。
VB.NETで開発しているんですがこんな感じです。

For i = 0 To DataGrid1.Items.Count - 1
dgi = DataGrid1.Items(i)
CheckBoxInStock = CType(dgi.FindControl("CheckBox1"), CheckBox)
If CheckBoxInStock.Checked = True Then
L1 = CType(dgi.FindControl("Label1"), Label).Text()
End If
Next
Checkboxがtrueになるのですが、Label1の値が取得できないんです。
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2006-01-20 10:25
FindControlって子コンテナの中も検索してくれるんでしたっけ?
でも、検索してくれてないとこのコードだとNULL参照でコケそうだし・・・

とりあえず、Cellの中をFindControlすべきなんじゃないでしょうか

CType(dgi.Cells(0).FindControl("CheckBox1"), CheckBox)
CType(dgi.Cells(0).FindControl("Label1"), Label)

つち
会議室デビュー日: 2006/01/19
投稿数: 4
投稿日時: 2006-01-20 11:46
現状のままでCheckBox1の方は検索が出来るのですが
label1がうまくいかないんです。

Cellsの設定しましたが、やっぱり取れませんでした。
CType(dgi.Cells(0).FindControl("Label1"), Label).Text()
lalupin4
大ベテラン
会議室デビュー日: 2004/07/26
投稿数: 163
投稿日時: 2006-01-20 12:07
 あ、その前に
1. 1列目にCheckBoxとLabelが入っている
2. 1列目CheckBox2列目にLabelが入っている
のかを聞いたほうがいいかな

1. なら
dgi.Cells(0).Controls.Countは2になってるかどうか確認してみてください。
2. なら
dgi.Cells(0).Controls.Count
dgi.Cells(1).Controls.Count
がそれぞれ1になってるかどうか確認してみてください。
つち
会議室デビュー日: 2006/01/19
投稿数: 4
投稿日時: 2006-01-20 13:29
すみません、、説明が間違っていました。
ItemTemplateにはtableを配置してあります。
Tableは2行11列です。
その中にCheckboxが1行目1列に入っています。
    Label1が2行目1列に入っています。
    他にも項目が入っています。
ですので、1をやってみたらdgi.Cells(0).Controls.Countが35って
出てきました。 

これで説明判りますでしょうか?
1

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