我的一个Windows窗体上有一个Datagridview,我打算让用户从组合框下拉菜单中选择一个查询,单击一个按钮,然后查询结果显示在datagridview上。
这一切都正常,但是当选择并提交不同的查询时,datagridview会显示以前选择的查询使用的其他空列。
阻止这种情况发生的最佳方法是什么?这是基于datagridview本身的吗?或我的子程序连接到数据库并执行查询
我已经尝试清除数据表(在查询子例程中使用)和datagridview的列,但这还没有解决问题。
我尝试使用按钮清除datagridview(尝试各种组合):
Private Sub btnclearquery_Click(sender As System.Object, e As System.EventArgs) Handles btnclearquery.Click
mysql.qrydata.Clear()
DataGridViewqry.DataSource = Nothing
DataGridViewqry.Columns.Clear()
DataGridViewqry.Rows.Clear()
End Sub
执行查询的子例程(在另一个代码文件中引用。当用户从组合框中选择查询时,使用select case填充sqlquery字符串):
Public qrysqlconn As MySqlConnection
Public qrycommand As New MySqlCommand
Public qryadapter As New MySqlDataAdapter
Public qrydata As New DataTable
Public qrysql As String
Public Sub doquery(ByVal sqlquery As String)
qrysqlconn = New MySqlConnection
qrysqlconn.ConnectionString = "server=localhost;" _
& "user id=root;" _
& "password=W1nd0ws;" _
& "database=hystest"
qrysql = sqlquery
Try
qrysqlconn.Open()
qrydata.Clear()
qrycommand.Connection = qrysqlconn
qrycommand.CommandText = qrysql
qryadapter.SelectCommand = qrycommand
qryadapter.Fill(qrydata)
queries.DataGridViewqry.DataSource = qrydata
queries.DataGridViewqry.FirstDisplayedScrollingRowIndex = queries.DataGridViewqry.RowCount - 1
Catch myerror As MySqlException
MessageBox.Show("Database error: " & myerror.Message)
Finally
qrysqlconn.Close()
qrysqlconn.Dispose()
End Try
End Sub
答案 0 :(得分:0)
我之前也遇到过这样的问题 您可能需要为要显示的每个新视图创建一个新的DataView实例来解决此问题:
Dim dataview As DataView = _ds.YourStuff.DefaultView
dataview.Stuff
答案 1 :(得分:0)
通过为每个查询创建单独的子例程/连接/数据表,我设法解决了这个问题,或者至少创建了解决问题的方法。所以代替:
doquery(sql command)
我用过:
query1(<parameters>)
query2(<parameters>)
...
etc
这似乎现在可行。这意味着问题的基础是反复使用相同的数据表。