「ほっ」と。キャンペーン
(.Net)DataGridViewRow作成時に列名指定で値を入れる

最近、DataGridViewRow.CreateCells()というメソッドを知りました。
これは既存の DataGridView の列定義に基づいてセル(正確にはセルテンプレート)を作成してくれるもので、新規DataGridViewの行を作るときに便利そうです。

それで、下記のようなコードを書いてみました。新たな DataGridViewRow を作成し、DataGridView に基づくセルテンプレート作成後、セルに値を入れグリッドにバインドするような流れです。(C#)
//dgvTest は DataGridViewのインスタンス
 
DataGridViewRow row = new DataGridViewRow();
row.CreateCells(dgvTest);
//列名指定で、セルに値代入
row.Cells["ColumnA"].Value = "a";
dgvInputPayList.Rows.Add(row);

上記のようにすると下記のような例外となりました。

System.ArgumentException はハンドルされませんでした。
Message="ColumnA という列は見つかりません。\r\nパラメータ名: columnName"
Source="System.Windows.Forms"
ParamName="columnName"

ただ、列名ではなく列のインデックスを指定すると可能なようです。
row.Cells[0].Value = "a";


で、とあるサイトを参考にすると、DataGridView に行を追加した後だとできるようです。
//dgvTest は DataGridViewのインスタンス
DataGridViewRow row = new DataGridViewRow();
row.CreateCells(dgvTest);
dgvInputPayList.Rows.Add(row);
row.Cells["ColumnA"].Value = "a";


しかし、上記だと2行目からがNGになります。
//dgvTest は DataGridViewのインスタンス
DataGridViewRow row = new DataGridViewRow();
row.CreateCells(dgvTest);
dgvInputPayList.Rows.Add(row);
row.Cells["ColumnA"].Value = "a";
 
DataGridViewRow row2 = new DataGridViewRow();
row2.CreateCells(dgvTest);
dgvInputPayList.Rows.Add(row2);
row2.Cells["ColumnA"].Value = "b";


System.ArgumentOutOfRangeException はハンドルされませんでした。
Message="指定された引数は、有効な値の範囲内にありません。\r\nパラメータ名: rowIndex"
Source="System.Windows.Forms"
ParamName="rowIndex"

どうやら、行のインデックスがまずいらしいです。


結局行を追加した後に、DataGridViewの行に対して、値を指定するようにしました。
//dgvTest は DataGridViewのインスタンス
DataGridViewRow row = new DataGridViewRow();
row.CreateCells(dgvTest);
int i = dgvInputPayList.Rows.Add(row);
dgvInputPayList["ColumnA", i].Value = "a";


参考:
DataGridViewコントロールを操作する101の方法 / DevX - japan.internet.com コラム
[PR]
by jehoshaphat | 2010-05-02 13:04 | .Net開発 | Trackback | Comments(4)
トラックバックURL : http://jehupc.exblog.jp/tb/12573968
トラックバックする(会員専用) [ヘルプ]
※このブログはトラックバック承認制を適用しています。 ブログの持ち主が承認するまでトラックバックは表示されません。
Commented by どん at 2010-07-18 16:46 x
参考にさせていただいております。m(_ _)m
ここに解決策の可能性がありました。どうでしょうか?
http://bytes.com/topic/net/answers/731760-adding-data-column-name-datagridview-c
Commented by Y at 2010-07-21 17:42 x
助かりました。
初VBAで、何時間も詰まっていたところから前に進めました。
ありがとうございます!
Commented by jehoshaphat at 2010-08-19 23:55
どん さん
ども。3流PGです。
遅くなりましたが、参考情報ありがとうございます。
こういう時に英語読めたらいいなと思ったりします。。
CreateCellsは結構クセあるんですね。
Commented by jehoshaphat at 2010-08-19 23:56
Y さん
ども。3流PGです。
遅くなりましたが、VBAでもDataGridViewは使えるんですか?
まぁお役にたてたのならよかったです。


<< 共有フォルダ上のバッチファイル... (.Net,ADSI)OUを取... >>