清除绑定到DataSet的DataGridView,而不会丢失标头VB.NET

时间:2016-06-29 15:09:49

标签: vb.net datagridview dataset

我目前有一个应用程序,您可以搜索特定位置,所有者等,这将返回有关设备的一些基本信息。我通过SQL查询获取此信息并将其放入DataSet中,然后将其放入DataGridView对象中。我正在尝试实现一个Clear按钮,它将删除搜索项以及DataGridView对象中的数据。

不幸的是,我无法使用DataGridView.Rows.Clear(),因为我的DataGridView绑定到DataSet。我使用DataGridView.DataSource = Nothing遇到了困难,因为这不仅删除了显示的数据,还删除了我为DataGridView创建的列的标题。我已经尝试了一些我发现的解决方案,例如DataGridView.Refresh()DataGridView.AutoGenerateColumns = false,但这些解决方案迄今已删除了列标题。

这是我用于向DataGridView对象添加行的代码;

    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

我正在寻找一个解决方案,允许我清除DataGridView中的行而不删除列标题,这样我可以在必要时使用清除按钮,但继续搜索仍然显示的列标题。

1 个答案:

答案 0 :(得分:3)

你可以Clone DataTable保留列,但“删除”数据:

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

或在旧桌子上使用DataRowCollection.Clear可能会导致更多副作用:

oldTable.Rows.Clear()