0
我有一个BackGroundWorker,可以在DataGridView中查看mySQL中的数据。在我的DoWork事件VB.net BackGroundWorker在DataGridView中交叉线程
connection()
Try
conn.Open()
Dim query As String
query = "SELECT column02 AS 'Company ID', column05 AS Lastname,
column06 AS Firstname, column07 AS Middlename,
column04 AS 'Contact No.', column13 AS 'Area'
FROM table01
WHERE column10 = '" & selectedAccount & "'
AND column18 = 'Yes'"
command = New MySqlCommand(query, conn)
dataAdapter.SelectCommand = command
dataAdapter.Fill(dataTable)
bSource.DataSource = dataTable
DataGridView_Accounts.DataSource = bSource
For i As Integer = 0 To dataTable.Rows.Count - 1
dataTable.Rows(i)("Company ID") = dataTable.Rows(i)("Company ID")
dataTable.Rows(i)("Lastname") = dataTable.Rows(i)("Lastname")
dataTable.Rows(i)("Firstname") = dataTable.Rows(i)("Firstname")
dataTable.Rows(i)("Middlename") = dataTable.Rows(i)("Middlename")
dataTable.Rows(i)("Contact No.") = dataTable.Rows(i)("Contact No.")
dataTable.Rows(i)("Area") = dataTable.Rows(i)("Area")
Next
conn.Close()
Catch ex As Exception
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
Finally
conn.Dispose()
End Try
它是在我的DataGridView中引发错误关于跨线程。
我曾尝试这个移动到RunWorkerCompleted事件
DataGridView_Accounts.DataSource = bSource
For i As Integer = 0 To dataTable.Rows.Count - 1
dataTable.Rows(i)("Company ID") = dataTable.Rows(i)("Company ID")
dataTable.Rows(i)("Lastname") = dataTable.Rows(i)("Lastname")
dataTable.Rows(i)("Firstname") = dataTable.Rows(i)("Firstname")
dataTable.Rows(i)("Middlename") = dataTable.Rows(i)("Middlename")
dataTable.Rows(i)("Contact No.") = dataTable.Rows(i)("Contact No.")
dataTable.Rows(i)("Area") = dataTable.Rows(i)("Area")
Next
大约有跨线程没有更多的错误,但是在我的DataGridView我无法查看结果。即使我的数据库已满,它也是空的。由于
该循环没有意义......它所做的只是将行和字段值分配给自己。 – MrGadget
后台工作正在检索数据,这是通过调用'Fill'完成的。摆脱那无用的循环。 UI更新是数据绑定,您应该在'RunWorkerCompleted'事件处理程序中执行此操作。 – jmcilhinney
在SQL中有两个无效的列别名:'column02 AS'公司ID''和'column04 AS'联系号'''除非MySql允许它们中有空格。 – MrGadget