在不丢失的情况下清除绑定到 DataSet 的 DataGridView headers VB.NET

Clearing DataGridView bound to DataSet without losing headers VB.NET

我目前有一个应用程序,您可以搜索特定位置、所有者等,这将 return 有关设备的一些基本信息。我通过 SQL 查询提取这些信息并将其放入 DataSet 中,然后将其放入 DataGridView object 中。我正在尝试实现一个清除按钮,该按钮将删除搜索词以及 DataGridView object.

中的数据

不幸的是,我无法使用 DataGridView.Rows.Clear(),因为我的 DataGridView 绑定到数据集。我 运行 在使用 DataGridView.DataSource = Nothing 时遇到困难,因为这不仅删除了显示的数据,而且还删除了我为 DataGridView 创建的列的 headers。我尝试了一些我发现的解决方案,例如 DataGridView.Refresh()DataGridView.AutoGenerateColumns = false,但到目前为止,这些解决方案已经删除了 headers.

这是我用来向 DataGridView 添加行的代码 object;

    Dim con As New SqlClient.SqlConnection(getConnectionString)
        Dim cmd As New SqlCommand("SELECT asset.assetID, owner.ownerName, model.brand, asset.modelID, deviceOwner.serialNumber, deviceOwner.location, asset.dateAssessed from asset 
                                  join deviceOwner on asset.assetID = deviceOwner.assetID
                                  join owner on deviceOwner.ownerID = owner.OwnerID
                                  join model on asset.modelID = model.modelID where asset.dateAssessed = @checkDate", con)
        cmd.Parameters.AddWithValue("@checkDate", searchEnterDate.Text.ToString)
        con.Open()
        Dim myDA As New SqlDataAdapter(cmd)
        myDA.Fill(myDataSet, "MyTable")
        displayResults.DataSource = myDataSet.Tables("MyTable").DefaultView
        con.Close()
        con = Nothing

我正在寻找一种解决方案,它允许我在不删除列 headers 的情况下清除 DataGridView 中的行,因此我可以在必要时使用清除按钮,但继续使用列 [=25= 进行搜索] 还在显示。

您可以 Clone DataTable 保留列但 "removes" 数据:

Dim oldTable As DataTable = CType(displayResults.DataSource, DataView).Table
Dim emptyTable As DataTable = oldTable.Clone()
displayResults.DataSource = emptyTable ' or emptyTable.DefaultView

或在旧 table 上使用 DataRowCollection.Clear,这可能会导致更多副作用:

oldTable.Rows.Clear()