Windowsフォームの1つに単一の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