まず、私の英語が下手で申し訳ありません。
私の問題は、別のスレッドからデータをロードすると、「オブジェクト参照がオブジェクトのインスタンスに設定されていない」という原因になります。
ここに私のコードがあります:
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")
では、私のコードの何が問題になっているのでしょうか? マルチスレッドメソッドから呼び出すと常にエラーが発生しますが、ボタンを配置すると正常に機能します。
マルチスレッドメソッドから呼び出すと常にエラーが発生しますが、ボタンを配置すると正常に機能します。
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)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加