1

私の目にはかなりまっすぐに見える何かの上に私の髪を引っ張っているようです. データセットを変更した後、datagridview コントロールを正しく更新できません。

最初にデータセットからデータグリッドビューを作成し、問題なく列を自動生成します。ただし、データセットを新しいデータで再生成すると、datagridview には新しいデータが正しく表示されますが、古い列ヘッダーは削除されません。

たとえば、ストア名とマネージャーを取得し、データグリッドビューを自動入力するクエリがあります。次に、ストア名とスーパーバイザーのみを提供するようにクエリを変更すると、ストア名、マネージャー (空白の列)、およびスーパーバイザーが返されます。

datagridview.refresh() と datagridview.update() を試しましたが、何も機能していないようです。これが私のコードです:

    MySQLConn.Open()

    Dim ExQry As New MySqlCommand(QryStr, MySQLConn)
    ExQry.CommandType = CommandType.Text
    Dim da As New MySqlDataAdapter(ExQry)
    dasCustomQryData.Clear() 'my dataset is called dasCustomQryData

    da.Fill(dasCustomQryData, "QryData")
    da.Update(dasCustomQryData, "QryData")

    With dgvCustomQuery
        .DataSource = Nothing
        .Dock = DockStyle.Fill
        .AutoGenerateColumns = True
        .DataSource = dasCustomQryData
        .DataMember = "QryData"
        .Refresh()
        .Visible = True
    End With

    MySQLConn.Close()
    da.Dispose()
    dasCustomQryData.Dispose()

したがって、datagridview を更新する場合は、新しい QryStr を上記のコードにプラグインし、データセットを再構築します。データグリッドビューには正しいデータが含まれているため、データセットは更新されていますが、私の問題は、データグリッドビューがデータが取り込まれていない古い列をクリアしていないことです。

すべての助けに感謝します。ありがとう

4

2 に答える 2

1

VB から直接接続とデータセットを作成し、データセットにテーブルを表示することをお勧めします。テーブルの下部には標準のクエリがありますが、変数をパラメーターとして使用して独自のクエリを作成し、テーブル アダプターを介してクエリを呼び出して、これを datagridview に直接割り当てることができます。
それは私のプログラムでは常にうまくいくようです。どのようなデータベースを使用していますか? 明らかかもしれませんが、確認のために、datagridview が正しくバインドされていませんか? dgdataが明らかにdatagridview
である私のプロジェクトの1つからのサンプル。
dgData.DataSource = TblEventsTableAdapter.ViewEvent(cmbEvents.SelectedItem.ToString)
ViewEvent は、データセットで作成されたカスタム クエリであり、1 つの引数を受け取ります。これがあなたに役立つことを願っています

于 2013-08-13T04:45:44.643 に答える
1

わかりました、少しトラブルシューティングしてコードをいじった後、これに対する簡単な解決策は、データテーブル自体が列ヘッダーを解放していないことであることがわかりました。そのため、datagridview とデータセットがクリアされていても、データテーブルにはまだ値が設定されていました。

次のコマンドは私の問題を解決しました:

dt.Columns.Clear()
于 2013-08-13T07:53:44.710 に答える