DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DataGridViewの行の取得について

環境/言語:[windowsXP C#  .NET Framework2.0 ]
分類:[.NET]

2006/10/17(Tue) 16:10:05 編集(投稿者)
2006/10/17(Tue) 09:19:58 編集(投稿者)
2006/10/17(Tue) 09:19:56 編集(投稿者)

おはようございます。いつもお世話になっています。
簡単なことだと思いますが質問させてください。
DataGridViewにはテキストデータからデータを読み込んで表示しています。
読み込んだ際、
DataGridViewCell DG = DataGrid1.CurrentCell;
int rowindex = DG.RowIndex
というふうに書くと実行時に「オブジェクト参照がオブジェクト インスタンスに設定されていません。」というエラーがでてしまいます。
しかしエラーが発生するのはRowCountが1の時のみです。ということは表示された時にインスタンスされてないがためにフォーカス?みたいなものが0行0列目に設定されていないということでしょうか。

補足ですがRowCountが2以上の場合表示したときにセレクトされているのは一番下の行になります。これはなにか関係があるのでしょうか。

インスタンスに設定されていないということでインスタンス化すればいいと思い調べました。
引用:
SelectedRows プロパティから、DataGridViewRow のインスタンスが取得できます。

ヘルプをみましたがどのように設定していいのかわかりませんでした。

なぜこのエラーが発生するのか、またどうしたら解決できるのか、不備なところなどありましたら教えてほしいです、よろしくお願いします。
DataSource に設定したときにはまだスキーマやデータが DataGridView に展開されていません。
たとえば Form のコンストラクタで DataSource を設定したとして、そのコンストラクタ内では DataGridView の Columns.Count / Rows.Count は 0 になります。
コンストラクタで設定したとき Load イベント時には展開済みですが、一番早いタイミングは DataBindingComplete イベントになる、のかな? このイベントはデータソースの状態が変更されるたびに発生しちゃいますけど。
2006/10/17(Tue) 13:19:34 編集(投稿者)
2006/10/17(Tue) 11:34:26 編集(投稿者)
2006/10/17(Tue) 10:06:13 編集(投稿者)
2006/10/17(Tue) 10:06:11 編集(投稿者)

■No17913に返信(Hongliangさんの記事)
Hongliangさん返答ありがとうございます。

> DataSource に設定したときにはまだスキーマやデータが DataGridView に展開されていません。
> たとえば Form のコンストラクタで DataSource を設定したとして、そのコンストラクタ内では DataGridView の Columns.Count / Rows.Count は 0 になります。

やはりそうですか。

> コンストラクタで設定したとき Load イベント時には展開済みですが、一番早いタイミングは DataBindingComplete イベントになる、のかな? このイベントはデータソースの状態が変更されるたびに発生しちゃいますけど。

これはDataBindingComplete イベント時にデータソースを取得すればよいということでしょうか。

またヘルプをみましたが、DataSourceの取得はテーブルからになっていますが、テーブルの設定などはしていません。テキストからデータを読み取り、それを直接セルに代入しています。

テーブルからじゃなくてもデータを初期化できませんか。

つまり.net FrameWork2.0で
http://www.atmarkit.co.jp/fdotnet/dotnettips/169dgcurcell/dgcurcell.html
のようなことがしたいのですが。可能でしょうか。

すいません。よろしくお願いします。
わかりにくい説明の質問ですいませんでした。

解決しませんでしたがもうちょっと調べようと思います。
ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板