DataGridView のデータ取得をDataSetのような形でできないでしょうか? への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 大池  (社会人)
投稿日時
2009/7/3 01:03:53
るきお様
お手数をおかけします。
>どのようにDataGridView1にデータをセットしていますか?
このあたりがよくわからないのですが、
DataGridView1のプロパティウインドウのDataSourceからDataTable1を選びました。
するとDataTable1BindingSourceと表示されています。これで回答になっていますでしょうか?
お示しのアドレスでVisualBasic中学校のデータベース講座が表れてびっくりしました。
実は私は初級講座からずっと勉強させいただきましたが、データベースに入ったとたんに別世界に入ったようで理解することができず恥ずかしながら挫折したところでした。すみません。
お手数をおかけします。
>どのようにDataGridView1にデータをセットしていますか?
このあたりがよくわからないのですが、
DataGridView1のプロパティウインドウのDataSourceからDataTable1を選びました。
するとDataTable1BindingSourceと表示されています。これで回答になっていますでしょうか?
お示しのアドレスでVisualBasic中学校のデータベース講座が表れてびっくりしました。
実は私は初級講座からずっと勉強させいただきましたが、データベースに入ったとたんに別世界に入ったようで理解することができず恥ずかしながら挫折したところでした。すみません。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2009/7/2 10:44:40
BindingSource を使っているのですね。であれば、
DirectCast(DataGridView1.DataSource, DataSet1).DataTable1
の部分を、
DirectCast(DirectCast(DataGridView1.DataSource, BindingSource).DataSource, DataSet1).DataTable1
とするとどうでしょうか。
(リレーションを貼ってある場合などでは、BindingSource.DataSource を
さらに別の BindingSource に割り当てている可能性もありますが…)
あるいは、こうかな。
Dim dr As DataSet1.DataTable1Row = DirectCast(DirectCast(DataGridView1.Rows(行番号).DataBoundItem, DataRowView).Row, DataSet1.DataTable1Row)
# 開発環境の無いところから投稿しているので、検証していません。
# 間違っていたらごめんなさい。
DirectCast(DataGridView1.DataSource, DataSet1).DataTable1
の部分を、
DirectCast(DirectCast(DataGridView1.DataSource, BindingSource).DataSource, DataSet1).DataTable1
とするとどうでしょうか。
(リレーションを貼ってある場合などでは、BindingSource.DataSource を
さらに別の BindingSource に割り当てている可能性もありますが…)
あるいは、こうかな。
Dim dr As DataSet1.DataTable1Row = DirectCast(DirectCast(DataGridView1.Rows(行番号).DataBoundItem, DataRowView).Row, DataSet1.DataTable1Row)
# 開発環境の無いところから投稿しているので、検証していません。
# 間違っていたらごめんなさい。
投稿者 るきお  (社会人)
投稿日時
2009/7/2 08:20:14
DataGridView1にデータをセットする方法によって方法が変わります。
どのようにDataGridView1にデータをセットしていますか?
こちらでも同じことを試せる手順で示していただけるととてもよいです。
ちょっと長くて申し訳ないのですが、私はだいたいこの方法でデータをセットしています。
http://homepage1.nifty.com/rucio/main/VBdotNet/Database/Database4.htm
(リスト4あたり)
どのようにDataGridView1にデータをセットしていますか?
こちらでも同じことを試せる手順で示していただけるととてもよいです。
ちょっと長くて申し訳ないのですが、私はだいたいこの方法でデータをセットしています。
http://homepage1.nifty.com/rucio/main/VBdotNet/Database/Database4.htm
(リスト4あたり)
投稿者 大池  (社会人)
投稿日時
2009/7/2 04:46:18
すみません。
今朝テストをしないでお礼を記載させていただきましたが、テストの結果次のようなエラーがでました。
ご指導のほどよろしくお願いいたします。
For Each dr As DataSet1.DataTable1Row In DirectCast(DataGridView1.DataSource, DataSet1).DataTable1
のところで
型 'System.Windows.Forms.BindingSource' のオブジェクトを
型() 'vb2008Test.DataSet1' にキャストできません。
関連するヒント
変換元と変換先の型をチェックして、変換が有効であることを確認します。
というエラーメッセージが出ました。どこをどのようにチェックしたらいいのかとまどっています。
お助けください。
使っているソフトは XP上で無料のダウンロードしましたVB2008です。
よろしくお願いいたします。
今朝テストをしないでお礼を記載させていただきましたが、テストの結果次のようなエラーがでました。
ご指導のほどよろしくお願いいたします。
For Each dr As DataSet1.DataTable1Row In DirectCast(DataGridView1.DataSource, DataSet1).DataTable1
のところで
型 'System.Windows.Forms.BindingSource' のオブジェクトを
型() 'vb2008Test.DataSet1' にキャストできません。
関連するヒント
変換元と変換先の型をチェックして、変換が有効であることを確認します。
というエラーメッセージが出ました。どこをどのようにチェックしたらいいのかとまどっています。
お助けください。
使っているソフトは XP上で無料のダウンロードしましたVB2008です。
よろしくお願いいたします。
投稿者 大池  (社会人)
投稿日時
2009/7/1 17:39:50
るきお様
早速のご指導ありがとうございます。
まさに私が知りたかったものそのものです。感激!!!
DirectCast、 DataSource など全く無知でした
勉強したいと思います。
今後ともよろしくお願いいたします。
早速のご指導ありがとうございます。
まさに私が知りたかったものそのものです。感激!!!
DirectCast、 DataSource など全く無知でした
勉強したいと思います。
今後ともよろしくお願いいたします。
投稿者 るきお  (社会人)
投稿日時
2009/7/1 05:41:50
こういうことでしょうか?
DataGridViewのDataSourceプロパティを使えば、関連付けられたDataSetやDataTableを取得できるので、DataSetやDataTableのほうが扱いやすいので好きなようにできます。
Dim msg As String
For Each dr As DataSet1.DataTable1Row In DirectCast(DataGridView1.DataSource, DataSet1).DataTable1
msg = dr.A & "," & dr.B & "," & dr.C
MsgBox(msg)
Next
DataGridViewのDataSourceプロパティを使えば、関連付けられたDataSetやDataTableを取得できるので、DataSetやDataTableのほうが扱いやすいので好きなようにできます。
投稿者 大池  (社会人)
投稿日時
2009/7/1 04:57:13
勉強不足でうまく説明ができなくてすみません。トンチンカンの質問でしたらお許しください。
DataSet、DataGridViewの勉強のためにつぎのようなテストをしました。
・DataSet1の列の定義をDataTable1でA,B,C,Dとしました。
・DataGridViewにデータセットを関連付けをしました。
・Dim dt As DataSet1.DataTable1DataTable = DataSet1.DataTable1
dt.AddDataTable1Row("001", "aa", "bb", "cc")
・
・
でデータを作りDataGridView1に表示できました。
・ ここでDataSet1のデータ取得は
For Each dr As DataSet1.DataTable1Row In DataSet1.DataTable1
msg = dr.A & "," & dr.B & "," & dr.C
Next
でできました。
・一方、DataGridView1 は DataGridView1.Rows(i).Cells(j).Value
でできますが、dr.A の方が一義的に取得でき後の扱いも便利なように思います。
・そこでDataGridView1でもこのような形で値の取得ができないものでしょうか?
どなたかお教えください。よろしくお願いいたします。
DataSet、DataGridViewの勉強のためにつぎのようなテストをしました。
・DataSet1の列の定義をDataTable1でA,B,C,Dとしました。
・DataGridViewにデータセットを関連付けをしました。
・Dim dt As DataSet1.DataTable1DataTable = DataSet1.DataTable1
dt.AddDataTable1Row("001", "aa", "bb", "cc")
・
・
でデータを作りDataGridView1に表示できました。
・ ここでDataSet1のデータ取得は
For Each dr As DataSet1.DataTable1Row In DataSet1.DataTable1
msg = dr.A & "," & dr.B & "," & dr.C
Next
でできました。
・一方、DataGridView1 は DataGridView1.Rows(i).Cells(j).Value
でできますが、dr.A の方が一義的に取得でき後の扱いも便利なように思います。
・そこでDataGridView1でもこのような形で値の取得ができないものでしょうか?
どなたかお教えください。よろしくお願いいたします。
お世話になります。
>BindingSource を使っているのですね。であれば、
るきえさんが聞いてこられたのはこのことなんですね。
For Each dr As DataSet1.DataTable1Row In DirectCast(DirectCastDataGridView1.DataSource, BindingSource).DataSource, DataSet1).DataTable1
msg += dr.A & "," & dr.B & "," & dr.C & "," & dr.D & "," & dr.E & vbCrLf
Next
でばっちりできました。ありがとうございます。感激しています。
また、
>あるいは、こうかな。
では
For i As Integer = 0 To DataGridView1.RowCount - 1
Dim dr As DataSet1.DataTable1Row = DirectCast(DirectCast(DataGridView1.Rows(i).DataBoundItem, DataRowView).Row, DataSet1.DataTable1Row)
msg += dr.A & dr.B & dr.C & dr.D & "," & dr.E & vbCrLf
Next
とやりますと Dim ・・・のところで次のエラーがでました。
「New キーワードを使用してインスタンスを作成します。」
こうなるとますます困ってしまうんですが、この構文は是非使いたく思いますのでご教授のほどよろしくお願いいたします。