我正在使用VB.NET制作WinForms应用程序。我有一个DataGridView,用于显示对SQL Server数据库的查询结果。效果很好:
Dim SQL As New SqlConnection()
Dim CMD As New SqlCommand()
Dim ADP As New SqlDataAdapter()
Dim TBL As New DataTable()
SQL.Close()
SQL.ConnectionString = "Server=" & GetServerIP() & ";Database=" & GetDB() & ";User Id=" & userID & ";Password=" & pass & ";"
CMD.Connection = SQL
CMD.CommandText = "SELECT * FROM " & table
SQL.Open()
ADP.SelectCommand = CMD
TBL.Clear()
ADP.Fill(TBL)
DataGridView1.DataSource = TBL
我尝试将查询更改为SELECT SEQ_NUM FROM CONFIG_SYS
,这导致了带有NAME和SEQ_NUM列的DataGridView。我尝试在DataGridView1.Columns.Clear()
之前调用DataGridView1.DataSource = TBL
,但这对任何事情都没有影响。我应该提到,如果我查询数据库中没有NAME列的任何表,则在DataGridView中的NAME列为空的情况下也会得到相同的结果。
我的理论是,DataGridView会自动将NAME添加为第一列,并期望使用NAME列作为主键来设置数据库表。但是,我的表没有NAME,它有一个称为SEQ_NUM的列作为主键。我可以通过DataGridView1.Columns("NAME").Visible = False
来解决此问题,但是我不认为这是最好的方法。
是否有更好的方法来处理此问题-我希望该列在数据网格中根本不存在,而不仅仅是不可见。
答案 0 :(得分:0)
TBL.Clear()
。调用DataTable.Clear()
将清除DataTable中的数据,但会将列保留在原处。
相反,我应该一直在调用TBL.Columns.Clear()
,它摆脱了DataTable的列。但是,在使用Breakpoints和Visual Studio的DataTable Visualizer时,我注意到只有调用TBL.Columns.Clear()
时,空行仍保留在DataTable中。因此,要回答关于如何删除您不知道为什么/如何存在的DataGridView中的列的问题,我建议致电:
DataTable.Clear()
DataTable.Columns.Clear()
在将DataGridView设置为等于DataTable之前。
.Clear() Method中的DataTable Class“清除数据表中的所有数据。”
DataTable.Columns Property 获得“包含表的DataColumn对象集合的DataColumnCollection”
DataColumnCollection Class还具有.Clear()方法,该方法“清除所有列的集合。”
感谢@TnTinMn通过使用断点将我指向正确的方向,并感谢@LarsTech使我意识到我在最初的回答中将DataGridView和DataTable混为一谈。
我希望这篇文章可以帮助其他人防止自己的头发从数据库中似乎不存在的列中冒出来……如果这不能解决您的特定问题。我还将检查查询,数据库表设置和DataGridView。但对我来说,问题出在数据表上。