Member 14885854 Ответов: 2

Ни одна строка не может быть добавлена к элементу управления datagridview, который не имеет столбцов. Сначала необходимо добавить столбцы


Я пытаюсь получить данные таблицы в gridview, но vb выдает мне следующую ошибку -
"Ни одна строка не может быть добавлена к элементу управления DataGridView, который не имеет столбцов. Сначала нужно добавить столбцы."

Что пошло не так? Почему эта ошибка отображается?

Что я уже пробовал:

Private Sub FrmFeesDetails_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       ds.Clear()

       If cn.State = ConnectionState.Open Then
           cn.Close()
       End If
       che = 0
       Module1.conn()
       cn.Open()

       Dim ctr, i As Integer
       'cn.Open()
       str = "select * from Fees ORDER BY FID ASC"
       cmd = New OleDbCommand(str, cn)
       da.SelectCommand = cmd
       da.Fill(ds, "Fees")
       ctr = ds.Tables("Fees").Rows.Count - 1
       For i = 0 To ctr
           DataGridView1.Rows.Add(ds.Tables("Fees").Rows(i)(0).ToString, ds.Tables("Fees").Rows(i)(1).ToString, ds.Tables("Fees").Rows(i)(2).ToString, ds.Tables("Fees").Rows(i)(3).ToString, ds.Tables("Fees").Rows(i)(4).ToString, ds.Tables("Fees").Rows(i)(5).ToString, ds.Tables("Fees").Rows(i)(6).ToString)
       Next
       'cn.Close()

       ds.Clear()
       'cn.Open()
       str = "select * from Class ORDER BY CID ASC"
       cmd = New OleDbCommand(str, cn)
       da.SelectCommand = cmd
       da.Fill(ds, "Class")
       ctr = ds.Tables("Class").Rows.Count - 1
       For i = 0 To ctr
           ComboBox4.Items.Add(ds.Tables("Class").Rows(i)(1).ToString)
       Next
       'cn.Close()

   End Sub

Sandeep Mewara

[Шапки в онлайн-мире предполагают крик, пожалуйста, избегайте его.]

2 Ответов

Рейтинг:
1

Sandeep Mewara

Вы, должно быть, получаете эту ошибку, если вы не добавили столбцы перед вставкой строк в файл. DataGridView1 выше в вашем коде.

Учитывая, что вы добавляете данные в сетку строка за строкой, вам нужно определить столбцы, прежде чем делать это.

2 варианта:
1. добавьте столбцы перед добавлением строк. Добавление столбцов в последовательности, в которую планируется добавить данные
2. Назначение объекта DataTable к сети как источник данных для привязки

Пример приведенного выше кода для добавления столбцов:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        DataGridView1.ColumnCount = 3
        DataGridView1.Columns(0).Name = "Product ID"
        DataGridView1.Columns(1).Name = "Product Name"
        DataGridView1.Columns(2).Name = "Product_Price"

        Dim row As String() = New String() {"1", "Product 1", "1000"}
        DataGridView1.Rows.Add(row)
        row = New String() {"2", "Product 2", "2000"}
        DataGridView1.Rows.Add(row)
        row = New String() {"3", "Product 3", "3000"}
        DataGridView1.Rows.Add(row)
        row = New String() {"4", "Product 4", "4000"}
        DataGridView1.Rows.Add(row)
    End Sub

Более подробную информацию см.: Практическое руководство.Свойство Столбцов (System.Окна.Формы) | Microsoft Docs[^]


Рейтинг:
0

OriginalGriff

Лучшим подходом было бы уточнить оператор SELECT, чтобы возвращать только те данные, которые вам нужны, в том порядке, в котором они вам нужны:

SELECT MyColumn AS [Title For Column], MyOtherColumn AS [Different Text] FROM MyTable ...
А затем используйте полученный DataTable в качестве источника данных для вашего DataGridView:
dgvDisplay.DataSource = dt
Таким образом, все столбцы будут созданы для вас, а данные загружены без необходимости дополнительного кода.
То же самое касается и вашего ComboBox: установите свойства DisplayMember и ValueMember, и он будет работать как мечта!