• ベストアンサー

DataGridViewの、選択されている行を取り出したい

いつもお世話になっております。 DataGridViewに関して、選択されているレコードをDataRow型で別フォームに渡してから、各項目をテキストボックスに表示したいのですがうまくいきません(DataRow型にこだわっているわけではないのですが、レコード1件丸ごと取得する型を他に知らないので例として挙げました)。 DataGridViewのCurrentRowプロパティや、SelectedRows(0)をDataRow型に代入する試みをしましたが、型変換できませんでした。 DataGridViewで選択されているレコード一件まるごと変数に渡す方法というのはあるのでしょうか? ちなみに、SelectionModeはSelectFullRowに、MultiSelectはFalseにしてあります。 ご存知の方ご教授いただけると助かります。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • AlexSuns
  • ベストアンサー率67% (78/115)
回答No.3

>おっしゃるとおりやってみたのですが、どうもやはり型変換ができませんでした。 >参照しているのは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) ※最後のキャストを変更すれば、型付データセットにも対応可能のはずです

guttten
質問者

お礼

すばらしくご丁寧に相談に乗って頂き本当に感謝しています。 おっしゃる方法で無事DataRowを取得する事が出来ました! 無事解決しました。 型の意識も今後よりいっそうしてレベルアップし行きたいと思います! ありがとうございました!

その他の回答 (2)

  • ape5
  • ベストアンサー率57% (85/148)
回答No.2

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

guttten
質問者

お礼

同じ方法ではありませんが、currentrowのindexを取り出して、datagridviewのrows(index)でもdatarowを取得する事が出来ました! おっしゃる方法も試してみたいと思います! ありがとうございました!

  • AlexSuns
  • ベストアンサー率67% (78/115)
回答No.1

型を意識してみると幸せになれますよ 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)

guttten
質問者

お礼

ご回答いただきありがとうございました。 そうですね、暗黙の型変換に頼っている部分があり、どうにかなってくれという考え方は危険だなと改めて思いました。 おっしゃるとおりやってみたのですが、どうもやはり型変換ができませんでした。 参照しているのはDataTable型なわけですから、DataRowも取り出せそうな気はするのですが。。。

関連するQ&A