0

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
4

2 に答える 2

0

私も以前、このような問題を抱えていました。
これを回避するには、表示する新しいビューごとに DataView の新しいインスタンスを作成する必要がある場合があります。

Dim dataview As DataView = _ds.YourStuff.DefaultView
dataview.Stuff
于 2013-08-01T15:42:40.793 に答える
0

クエリごとに個別のサブルーチン/接続/データテーブルを作成することで、これを解決するか、少なくとも問題の回避策を作成することができました。代わりに:

doquery(sql command)

利用した:

query1(<parameters>)
query2(<parameters>)
...
etc

これで今のところ問題なく動作しているようです。これは、問題が同じデータテーブルを何度も再利用したことに基づいていることを意味します。

于 2013-08-05T08:07:38.127 に答える