我目前有一个应用程序,您可以搜索特定位置,所有者等,这将返回有关设备的一些基本信息。我通过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中的行而不删除列标题,这样我可以在必要时使用清除按钮,但继续搜索仍然显示的列标题。
答案 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()