VB.NET — Данные DataGridView не отображаются

#vb.net

#vb.net

Вопрос:

Я работаю над проектом WINFORM. Я пытаюсь заставить DataGridView отображаться правильно, но единственный элемент, который отображается, — это заголовки. Я пытался следить за некоторыми интернет-статьями, но я не могу получить данные для отображения в сетке. Я пытаюсь создать 4 столбца. Первый — это столбец с флажком, а остальные предназначены для отображения данных (за вычетом последнего столбца, который должен быть скрытым) Я могу получить данные для отображения, если удалю строку : DataGridView1.AutoGenerateColumns = False . Что мне нужно, чтобы отобразить данные?

 Private Sub GetDataRows(ByVal DateList As String)
    Dim SQLConn As New SQLConnector(ConfigurationManager.ConnectionStrings("connection").ToString)
    Dim SQLStatement As String = "SELECT [upload_date],[name],[row_id] FROM [dbo].[db_table] WHERE upload_date in ("   DateList   ")"
    Dim dtResults As New DataTable

    dtResults = SQLConn.GetDataTableByStatement(SQLStatement) 'Call database and returns a datatable

    DataGridView1.AutoGenerateColumns = False

    GenerateGridView()
    DataGridView1.DataSource = dtResults



End Sub
Private Sub GenerateGridView()

    Dim checkColumn As New DataGridViewCheckBoxColumn()
    checkColumn.Name = " "
    checkColumn.HeaderText = " "
    checkColumn.Width = 50
    checkColumn.ReadOnly = False
    checkColumn.FillWeight = 10
    DataGridView1.Columns.Add(checkColumn)

    Dim gridCol1 As New DataGridViewColumn
    gridCol1.Name = "upload_date"
    gridCol1.HeaderText = "Upload Date"
    gridCol1.DataPropertyName = "upload_date"
    gridCol1.Width = 50
    gridCol1.ReadOnly = True
    DataGridView1.Columns.Add(gridCol1)

    Dim gridCol2 As New DataGridViewColumn
    gridCol2.Name = "hospital_name"
    gridCol2.HeaderText = "Hospital Name"
    gridCol2.DataPropertyName = "hospital_name"
    gridCol2.Width = 50
    gridCol2.ReadOnly = True
    DataGridView1.Columns.Add(gridCol2)

    Dim gridCol3 As New DataGridViewColumn
    gridCol3.Name = "row_id"
    gridCol3.HeaderText = "Row ID"
    gridCol3.DataPropertyName = "row_id"
    gridCol3.Width = 50
    gridCol3.ReadOnly = True
    gridCol3.Visible = False
    DataGridView1.Columns.Add(gridCol3)
End Sub
  

Комментарии:

1. Если вы не хотите, чтобы сетка автоматически генерировала столбцы, избавьтесь от этого метода и создайте их в конструкторе. Я предполагаю, что ваша конкретная проблема заключается в том, что вы создаете DataGridViewColumn объекты вместо DataGridViewTextBoxColumn объектов.

2. Зачем вам использовать New ключевое слово in Dim dtResults As New DataTable , если вы просто собираетесь присвоить что-то еще той же переменной в следующей строке? Почему бы вам просто не использовать одну строку: Dim dtResults As DataTable = SQLConn.GetDataTableByStatement(SQLStatement) ?

Ответ №1:

Автоматически генерируемый столбец имеет значение false, возможно, это создает проблему. Почему бы вам не попробовать это в дизайне формы. Выполните следующие действия: дизайн формы -> Источник данных -> Выберите источник данных -> выберите таблицу, которую вы хотите отобразить в таблице данных -> нажмите на нее -> вы найдете опцию просмотра сетки -> нажмите на нее -> затем перетащите таблицу в свою форму. вам также не нужно устанавливать источник данных. но если вы хотите скрыть какой-либо столбец, вам нужно сделать это вручную. надеюсь, это сработает.