簡體   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