プロが教えるわが家の防犯対策術!

いつもお世話になっております。

DataGridViewに関して、選択されているレコードをDataRow型で別フォームに渡してから、各項目をテキストボックスに表示したいのですがうまくいきません(DataRow型にこだわっているわけではないのですが、レコード1件丸ごと取得する型を他に知らないので例として挙げました)。

DataGridViewのCurrentRowプロパティや、SelectedRows(0)をDataRow型に代入する試みをしましたが、型変換できませんでした。

DataGridViewで選択されているレコード一件まるごと変数に渡す方法というのはあるのでしょうか?

ちなみに、SelectionModeはSelectFullRowに、MultiSelectはFalseにしてあります。

ご存知の方ご教授いただけると助かります。
よろしくお願いします。

A 回答 (3件)

型を意識してみると幸せになれますよ



DataGridView.CurrentRow プロパティ
 System.Windows.Forms.DataGridViewRow

DataGridView.SelectedRows プロパティ
 System.Windows.Forms.DataGridViewSelectedRowCollection

↓(型を理解したら)

DataGridViewRow.DataBoundItem プロパティ
 System.Object
 行に値を読み込むデータ バインド オブジェクトを取得します。


以上により、下記のように記述することができます
※実際に使用できるかどうかまでは確認していません
[C#]
System.Windows.Forms.DataGridViewRow dgr = this.DataGridView1.CurrentRow;
System.Data.DataRow dr = (System.Data.DataRow)dgr.DataBoundItem

[VB2005]
Dim dgr As System.Windows.Forms.DataGridViewRow = Me.DataGridView1.CurrentRow
Dim dr As System.Data.DataRow = CType(dgr.DataBountItem, System.Data.DataRow)
    • good
    • 0
この回答へのお礼

ご回答いただきありがとうございました。

そうですね、暗黙の型変換に頼っている部分があり、どうにかなってくれという考え方は危険だなと改めて思いました。

おっしゃるとおりやってみたのですが、どうもやはり型変換ができませんでした。
参照しているのはDataTable型なわけですから、DataRowも取り出せそうな気はするのですが。。。

お礼日時:2007/10/17 11:14

DataRowにこだわるのであれば、現在行のDataGridViewRowをまず取得して、その行の主キーの値で、DataTableのFindメソッドかSelectメソッドで検索すれば、現在行のDataRowが取り出せると思うので試してみてはどうですか。

    • good
    • 1
この回答へのお礼

同じ方法ではありませんが、currentrowのindexを取り出して、datagridviewのrows(index)でもdatarowを取得する事が出来ました!

おっしゃる方法も試してみたいと思います!
ありがとうございました!

お礼日時:2007/10/17 22:12

>おっしゃるとおりやってみたのですが、どうもやはり型変換ができませんでした。


>参照しているのはDataTable型なわけですから、DataRowも取り出せそうな気はするのですが。。。

えー・・・スイマセン
今度はコーディングして確認してみたところ、
なにやら、1ステップすっ飛ばしていました

下記の手順にて取得可能です

[C#]
System.Windows.Forms.DataGridViewRow dgr = this.DataGridView1.CurrentRow;
System.Data.DataRowView drv = (System.Data.DataRowView)dgr.DataBoundItem;
System.Data.DataRow dr = (System.Data.DataRow)drv.Row;

[VB2005]
Dim dgr As System.Windows.Forms.DataGridViewRow = Me.DataGridView1.CurrentRow
Dim drv As System.Data.DataRowView = CType(dgr.DataBoundItem, System.Data.DataRowView)
Dim dr As System.Data.DataRow = CType(drv.Row, System.Data.DataRow)

※最後のキャストを変更すれば、型付データセットにも対応可能のはずです
    • good
    • 3
この回答へのお礼

すばらしくご丁寧に相談に乗って頂き本当に感謝しています。

おっしゃる方法で無事DataRowを取得する事が出来ました!
無事解決しました。
型の意識も今後よりいっそうしてレベルアップし行きたいと思います!

ありがとうございました!

お礼日時:2007/10/17 22:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A