- PR -

[ASP.NET2.0]GridViewからの値のスマートな取得方法

1
投稿者投稿内容
hiropon
会議室デビュー日: 2007/01/24
投稿数: 5
お住まい・勤務地: 東京都
投稿日時: 2007-01-31 17:43
Visual Web Developer 2005 Express Editionを使用して、ASP.NET2.0のGridViewを調査しております。

データコンポーネント機能(xsdファイル)で、任意のテーブルの型付データセットと全件取得用のメソッドをもつテーブルアダプターを自動生成。
GridViewのデータソースにObjectDataSourceを選択後、ビジネスオブジェクトとして上述のテーブルアダプターを指定して、GridViewに全件を自動バインドして表示しています。

画面上に設置したボタン押下のイベントハンドラで、そのGridViewの全行をループして各列の値を参照したいのですが、以下のような列インデックスベタ書き方式しか思いつきません。
もっとスマートな取得方法(ベタ書きしないで済む方法)はないものでしょうか?

コード:

GridViewRowCollection rows = this.GridView1.Rows;
GridViewRow row;

for (int i = 0; i < rows.Count; i++)
{
row = rows[i];
col0 = row.Cells[0].Text;
col1 = row.Cells[1].Text;
col2 = row.Cells[2].Text;
col3 = row.Cells[3].Text;
}



[ メッセージ編集済み 編集者: hiropon 編集日時 2007-01-31 17:49 ]
未記入
大ベテラン
会議室デビュー日: 2006/12/15
投稿数: 157
投稿日時: 2007-01-31 18:15
rowとcellのfor部分をforeachにするくらいかね?
http://www.atmarkit.co.jp/fdotnet/basics/oop07/oop07_03.html
hiropon
会議室デビュー日: 2007/01/24
投稿数: 5
お住まい・勤務地: 東京都
投稿日時: 2007-02-01 15:33
引用:

未記入さんの書き込み (2007-01-31 18:15) より:
rowとcellのfor部分をforeachにするくらいかね?
http://www.atmarkit.co.jp/fdotnet/basics/oop07/oop07_03.html



なるほど。ただ、特定の列だけ値を参照したい場合もありえるので...

GridViewのBoundField列をTemplateFieldに変更して、その中にItemTemplateでくくったLabelコントロールを配置、LabelコントロールのTextプロパティにバウンドの設定をすれば、プログラム側から行ごとにLabelのID値でFindControlして、列を識別できることは分かったのですが、これってまっとうな方法なのでしょうか!?

コード:
foreach ( GridViewRow row in this.GridView1.Rows ) {
    col1 = ((Label)(row.FindControl("col1"))).Text;
}

sou
ベテラン
会議室デビュー日: 2002/09/25
投稿数: 56
投稿日時: 2007-02-02 01:48
私も同じ方法でGridView内に配置したWebControlより値を取得しています。
FindControlメソッドの使用は定石だと思っていますが・・。
hiropon
会議室デビュー日: 2007/01/24
投稿数: 5
お住まい・勤務地: 東京都
投稿日時: 2007-02-02 17:47
sou様、返信ありがとうございます。

定石として使われていると聞いて安心しました。
さすがに列番号のベタ書きはマズイと思うので、この方法でいこうと思います。
1

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