質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.44%
DataGrid

GUIの一種であり、データを表の形式でみることが可能です。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

48094閲覧

【VB.NET】DataGridViewのデータをDataTableに格納する方法について

programer

総合スコア31

DataGrid

GUIの一種であり、データを表の形式でみることが可能です。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2016/08/15 00:51

編集2016/08/15 02:15

###前提・実現したいこと
現在VB.NETでマスタ画面の作成をしています。
将来的には、DBから値を取得し、DataGridViewに値を表示する予定なのですが、
現状は、モックアップを作成している段階です。
そこで、DataGridViewに「DataGridView1.Rows.Add("ああ","いい")」のように固定でデータを表示させているのですが、そのデータをDataTableにバインドして別ダイアログに渡すという処理をしたいのですが、固定値で与えられているDataGridViewのデータをDataTableにバインドするやり方がわからずに困っています。
どのようにすれば、DataGridViewのデータをDataTableに渡すことができるのでしょうか。
DataGridViewに表示されているデータをすべてDataTableに格納したいです。

###補足情報(言語/FW/ツール等のバージョンなど)
VB.NET VisualStudio2013 Windows7 64bit

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

データテーブルをDataGridViewにバインドするなら以下のコードになります。
DataGridView1.DataSource = DataTable1

バインドしてから入力すればDataTableに内容が反映されます。
ただし、列はあらかじめデータテーブルに追加しておく必要があります。

投稿2016/08/15 01:34

dmon

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

programer

2016/08/15 01:39

回答ありがとうございます。 質問の下記方が悪かったのですが、「DataGridView1.Rows.Add(”ああ”,”いい”)」のような形でグリッドに固定値をはめ込んでいます。 そのグリッドにに表示されている値をすべてDataTableに格納したいのですが、どのようにすればよいのでしょうか。
dmon

2016/08/15 02:14

DataGridViewにデータテーブルをバインドさせるとプログラムでDataGridViewに行を追加することは出来ないので、この場合はデータテーブル側に行を追加するようにするしかありません。 単純に値をDataTableに格納したいだけなら、以下のようにすれば可能かと思います。 For Each column As DataGridViewColumn in DataGridView1.Columns dataTable1.Columns.Add(CStr(column.HeaderCell.Value)) Next For rowIndex As Integer = 0 To DataGridView1.Rows.Count - 1 Dim values(DataGridView1.Columns.Count - 1) For columnIndex As Integer = 0 To DataGridView1.Columns.Count - 1 values(columnIndex) = DataGridView1.Rows(rowIndex).Cells(columnIndex).Value Next dataTable1.Rows.Add(values) Next
programer

2016/08/15 02:38

何度も申し訳ありません。 教えていただいたコードを試してみましたが、DataTableにAddするところ(Column.valueと実際グリッドの中身ののデータのところ)で、落ちてしまうのですがなぜでしょうか。 DataTableは、「Dim DataTable1 As DataTable = Nothing」 のように宣言してあります。 エラーが出るのではなく、そこで処理が終了してしまいます。
dmon

2016/08/15 02:57 編集

Dim DataTable1 As DataTable = Nothing を Dim DataTable1 As New DataTable にしてみてください。
programer

2016/08/15 03:00

出来ました! お忙しい中申し訳ありませんでした。 本当にありがとうございました。 疑問なのですが、なぜ「Dim DataTable1 As DataTable = Nothing」 ではダメだったのですか?
dmon

2016/08/15 04:27

オブジェクト指向の基本的な概念なので、なかなか説明が難しいのですが、一応私なりの説明を記載します。(オブジェクト 参照 インスタンスとかで調べたほうがいいかも知れません) Dim DataTable1 As DataTable ←これは変数(オブジェクト)の宣言です。 要はDataTableという型の箱というか入れ物を用意しますよという意味になります。 ただの箱なので中身(実体とかインスタンスといいます)がなく、これに対して何かしようとしても中身がないので何もできませんよとエラーになります。 New DataTableはデータテーブルという型の中身(インスタンス)を作成しなさいという命令になります。 Dim DataTable1 As New DataTable は Dim DataTable1 As DataTable DataTable1 = New DataTable とまったく同じでDataTable型の箱(オブジェクト)を用意してそこにDataTable型の中身(インスタンス)を作成して格納するという意味になります。 (ほんとは格納ではなくオブジェクトがインスタンスを参照するという意味になるのですが、イメージとして箱に中身が入るで問題ないはずです) 箱に中身が入ることで初めて箱を通して値を格納したり、行を増やしたりといった操作が出来るようになるわけです。 ちなみにInteger型等はプリミティブ型といって上記にはあてはまらないのですが、宣言したタイミングで自動的にインスタンスが作成されている(New が要らない)ものと認識してもらえば良いです。(厳密には少し違うのですがその間隔で問題ないと思います) 長くなりましたが、参考になれば幸いです。
programer

2016/08/15 09:25

お忙しいところ大変申し訳ありません。 とても参考になりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.44%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問