繁体   English   中英

DataGridView中不需要的名称列 - 如何摆脱它?

[英]Unwanted name column in DataGridView - How can I get rid of it?

我正在使用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

问题是DataGridView有一个NAME列,每行都是空的。 看起来像这样

我尝试将查询更改为SELECT SEQ_NUM FROM CONFIG_SYS ,这导致带有NAME和SEQ_NUM列的DataGridView。 我尝试在DataGridView1.DataSource = TBL之前调用DataGridView1.Columns.Clear() ,这对任何事情都没有影响。 我应该提一下,如果我查询数据库中没有NAME列的任何表,我在DataGridView中使用空NAME列获得相同的结果。

我的理论是,DataGridView会自动添加NAME作为第一列,期望使用NAME列作为主键来设置数据库表。 但是,我的表没有NAME,它有一个名为SEQ_NUM的列作为主键。 我可以通过执行DataGridView1.Columns("NAME").Visible = False解决这个问题DataGridView1.Columns("NAME").Visible = False但我不认为这是最好的方法。

有没有更好的方法来处理这个问题 - 我希望数据网格中的列根本不存在,而不仅仅是不可见。

导致我的问题的原因是我错误地调用了TBL.Clear()

调用DataTable.Clear()将清除DataTable.Clear()的数据,但它会保留列。

相反,我应该调用TBL.Columns.Clear() ,它删除了DataTable的列。 但是,使用Breakpoints和Visual Studio的DataTable Visualizer,我注意到只有调用TBL.Columns.Clear()才会在DataTable中留下空行。 因此,为了回答如何摆脱DataGridView中的一个你不知道为什么/如何存在的列的问题,我建议打电话:

DataTable.Clear()
DataTable.Columns.Clear()

在将DataGridView设置为等于DataTable之前。

摘自MSDN:

DataTable类.Clear()方法 “清除所有数据的DataTable”。

DataTable.Columns属性获取“包含表的DataColumn对象集合的DataColumnCollection”

DataColumnCollection类还有一个.Clear()方法,它“清除任何列的集合”。


感谢@TnTinMn通过使用断点和@LarsTech指出我正确的方向让我意识到我在原始答案中严重混淆了DataGridView和DataTable。

我希望这篇文章可以帮助其他人防止他们在他们的数据库中一个不存在的列似乎已经实现的地方撕开他们的头发......如果这不能解决你的具体问题。 我还会检查Query,Database Table设置和DataGridView; 但对我来说,问题出在DataTable上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM