2017-05-20 11 views
1

まず、悪い英語を残念に思います。別のスレッドから呼び出すときにVB.NETのDatagridviewが例外をスローしました

私の問題は、別のスレッドからデータをロードするときに「オブジェクトのインスタンスがオブジェクトのインスタンスに設定されていません」という原因です。

Private Sub GetData(ByVal startRecord As Integer, ByVal maxRecord As Integer) 

    Dim ds As DataSet = New DataSet() 
    Dim da As MySqlDataAdapter = New MySqlDataAdapter("select * from my_data", SqlCon) 

    Try 
     da.Fill(ds, startRecord, maxRecord, "my_data") 
     ds.Tables("my_data").DefaultView.AllowNew = False 
     dgv.DataSource = ds.Tables("my_data") 

     For Each col As Object In dgv.Columns 
      If TypeOf col Is DataGridViewCheckBoxColumn Then 
       DirectCast(col, DataGridViewCheckBoxColumn).Visible = False 
      ElseIf TypeOf col Is DataGridViewImageColumn Then 
       DirectCast(col, DataGridViewImageColumn).Visible = False 
      ElseIf TypeOf col Is DataGridViewTextBoxColumn Then 

       Dim tbc As DataGridViewTextBoxColumn = CType(col, DataGridViewTextBoxColumn) 
       If tbc.Name = "no" Then 
        tbc.Width = 40 
        tbc.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter 
        tbc.HeaderText = "No" 
       ElseIf tbc.Name = "ID" Then 
        tbc.Width = 110 
        tbc.HeaderText = "ID" 
       ElseIf tbc.Name = "name" Then 
        tbc.Width = 290 
        tbc.HeaderText = "Name" 
       ElseIf tbc.Name = "Address" Then 
        tbc.Width = 230 
        tbc.HeaderText = "Address" 
       Else 
        tbc.Visible = False 
       End If 
      End If 
     Next 
    Catch ex As Exception 
     MsgBox(ex.Message) 
    End Try 

End Sub 

問題はここにある:

dgv.DataSource = ds.Tables("my_data") 

だから、私のコードの何が問題なのです。ここ

は私のコードですか?マルチスレッドの方法から呼び出すときには常にエラーが発生しますが、ボタンを置くとうまくいきます。

答えて

0

を持つ必要があります。

あなたのGetData()メソッドは明らかにあなたのフォームにはないので、 "dgv"が誰であるか分かりません。 1つの解決策は、他のパラメータと同じようにDataGridViewを渡すことです。

変更:

Private Sub GetData(ByVal startRecord As Integer, ByVal maxRecord As Integer) 

へ:

Private Sub GetData(ByVal dgv As DataGridView, ByVal startRecord As Integer, ByVal maxRecord As Integer) 

その後(フォームで)呼び出しは次のようになります。

GetData(dgv, someValue, someOtherValue) 
+0

ありがとうございます!それは今働いている – Navhi

0

あなたが使用しようとしている変数には何も含まれていないということです。何かを指すように設定する必要があります。

いいえdvgが指定されていて、dvgをサブルーチンに渡していない箇所があります。

ので、あなたはそれは、常にメソッドをマルチスレッドからそれを呼び出すとき、エラーを取得 が、私はボタンを入れたときに、それは仕事の罰金だだdim dvg as something = somethingまたはdim dvg as new something = new something

+0

は、ご返信いただきありがとうございますが、今の私のDataGridView 'Dim dgv As DataGridView = New DataGridView'を入力すると何もロードされません – Navhi

関連する問題