投稿者 大池  (社会人) 投稿日時 2010/1/13 23:02:41
いつもお世話になるばかりでありがとうございます。恐縮です。
XPでVB2008 ExpressEditionを使っています。
DataGridViewの値を取得するためにつぎのようなテストをしましたが、For Eachのところで
「型 'DataTable1DataTable' のオブジェクトを型 'System.Windows.Forms.BindingSource' にキャストできません。」 
For i のところで
「オブジェクト参照がオブジェクト インスタンスに設定されていません。」
のエラーがでます。
実は昨年6月30日に同じような質問をさせていただき、
その時のご指導でFor Eachはうまくいったつもりだったのですが、
お恥ずかしい限りです。厚かましくも再度ご指導を乞うしだいです。
よろしくお願いいたします。

        '(1): データ設定
Dim dt As DataSet1.DataTable1DataTable = DataSet1.DataTable1
dt.AddDataTable1Row("001", "勝", "カツ", "1823", "幕府")
dt.AddDataTable1Row("002", "岩倉", "イワクラ", "1825", "公家")
dt.AddDataTable1Row("003", "西郷", "サイゴウ", "1828", "薩摩")
dt.AddDataTable1Row("004", "大久保", "オオクボ", "1830", "薩摩")
dt.AddDataTable1Row("005", "木戸", "キド", "1833", "長州")
'
'(2): データ表示
'DataGridView1.DataSource は DataTable1BindingSource
'
DataGridView1.DataSource = dt
' (3) : DataGridViewの値取得
Dim msg As String = "For Each:"
For Each dr As DataSet1.DataTable1Row In DirectCast(DirectCast(DataGridView1.DataSource, BindingSource).DataSource, DataSet1).DataTable1
   msg += dr.id + "," & dr.名前 + "," & dr.フリガナ + "," & dr.生誕年 + vbCrLf
Next
TextBox3.Text = msg
        

' (4) : DataGridViewの値取得
Dim msg = "For i :"
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.id & "," & dr.名前 & "," + dr.フリガナ + "," + dr.生誕年 + vbCrLf
Next
TextBox2.Text = msg