Столбец нежелательного имени в DataGridView - Как мне от него избавиться? - PullRequest
0 голосов
/ 27 марта 2019

Я делаю приложение WinForms, используя VB.NET.У меня есть 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, который пуст в каждой строке.Which looks like this

Я попытался изменить запрос на SELECT SEQ_NUM FROM CONFIG_SYS, что привело к созданию DataGridView со столбцами NAME и SEQ_NUM.Я пытался позвонить DataGridView1.Columns.Clear() до DataGridView1.DataSource = TBL, и это ни на что не влияет.Я должен отметить, что если я запрашиваю любую таблицу в моей базе данных, у которой нет столбца NAME, я получаю те же результаты с пустым столбцом NAME в моем DataGridView.

Моя теория состоит в том, что DataGridView автоматически добавляет NAME какпервый столбец, ожидая, что таблица базы данных будет настроена со столбцом NAME в качестве первичного ключа.Однако в моей таблице нет NAME, в качестве первичного ключа в ней есть столбец с именем SEQ_NUM.Я могу обойти это, выполнив DataGridView1.Columns("NAME").Visible = False, но я не чувствую, что это лучший способ сделать это.

Есть ли лучший способ справиться с этим - я бы хотел, чтобы столбец вообще не существовал в сетке данных, а не просто не был бы видимым.

1 Ответ

0 голосов
/ 27 марта 2019

Причиной моей проблемы был тот факт, что я неправильно набрал TBL.Clear().

Вызов DataTable.Clear() удалит данные из таблицы данных, но оставит столбцы на месте.

Вместо этого я должен был позвонить TBL.Columns.Clear(), что избавляет от столбцов DataTable.Однако, используя точки останова и визуализатор DataTable Visual Studio, я заметил, что только вызов TBL.Columns.Clear() оставил пустые строки в DataTable.Поэтому, чтобы ответить на вопрос о том, как избавиться от столбца в DataGridView, который вы не знаете, почему / как он существует, я предлагаю позвонить:

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

Перед установкой DataGridView равным вашемуDataTable.

Взято из MSDN:

Метод .Clear () из DataTable Class"очищает DataTable от всех данных."

Свойство DataTable.Columns получает "DataColumnCollection, который содержит коллекцию объектов DataColumn для таблицы"

Класс DataColumnCollection также имеет .Clear () Метод, который «очищает коллекцию любых столбцов».


Спасибо @TnTinMn за указание меня в правильном направлении с помощью точек останова и @LarsTech за то, что я сделал меняПонимаю, что я резко перепутал DataGridView и DataTable в своем первоначальном ответе.

Я надеюсь, что этот пост может помочь другим не позволить себе разорвать голову о том, откуда, казалось бы, материализовался несуществующий столбец в их базах данных ... Если это не решит вашу конкретную проблему.Я бы также проверил настройки Query, Database Table и DataGridView;но для меня проблема была с DataTable.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...