Как добавлять элементы в DataGridViewComboBoxColumn DataGridView во время выполнения

#vb.net

#vb.net

Вопрос:

У меня есть datagridview с тремя столбцами, которые заполняются с помощью Datareader. DatagridViewComboboxcolumn В DataGridView есть.

Я хочу, чтобы это DatagridViewComboboxcolumn также должно быть заполнено с помощью datareader.

Пожалуйста, подскажите, как я могу добавлять элементы в DataGridViewComboBoxColumn с помощью Datareader. Ниже приведен код, который я пробовал.

Здесь dr — это SqlDataReader

 Datagridview.Rows.Add(dr("Column1").ToString, dr("Column2"),dr("DatagridViewComboboxcolumn "))
  

Но когда я добавляю этот способ, я получаю сообщение об ошибке в столбце DataGridViewComboBoxColumn.
Пожалуйста, предложите

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

1. Вы заметили, что в конце dr («DataGridViewComboBoxColumn «) есть пробел

Ответ №1:

Как упоминалось ранее, вы не можете установить источник данных DataGridViewColumn в DataReader (поскольку это только прямой объект, подключенный к базе данных). Однако вы можете заполнить таблицу данных и установить источник данных в DataGridViewColumn для этой таблицы данных. Вам также нужно будет установить DataPropertyName (это имя столбца источника данных DataGridView), ValueMemeber и DisplayMember . В приведенном ниже примере используется база данных Adventureworks и заполняет DataGridView 4 столбцами (один из которых является combobox — ProductIdCombo). Просто создайте форму, поместите в нее элемент управления DataGridGridView с именем dataGridView1 и выполните следующее. Столбец ProductID демонстрирует, что базовый столбец, связанный со списком (столбец ProductIdCombo), действительно обновляет поле ProductID в DataTable dtProductsInventory.

         Dim dtProductInventory As New System.Data.DataTable
        Dim dtProducts As New System.Data.DataTable

        Using objSqlServer As New System.Data.SqlClient.SqlConnection("Server=LOCALHOSTSQLEXPRESS; Integrated Security=SSPI;Initial Catalog=AdventureWorks")
            objSqlServer.Open()
            Dim sqlCmd As New System.Data.SqlClient.SqlCommand("select * from production.ProductInventory", objSqlServer)
            dtProductInventory.Load(sqlCmd.ExecuteReader)
            sqlCmd.CommandText = "Select * from production.product"
            dtProducts.Load(sqlCmd.ExecuteReader)
        End Using

        DataGridView1.AutoGenerateColumns = False
        DataGridView1.DataSource = dtProductInventory

        Dim colProductIdCombo As New System.Windows.Forms.DataGridViewComboBoxColumn()
        colProductIdCombo.DataSource = dtProducts
        colProductIdCombo.DisplayMember = "Name"
        colProductIdCombo.ValueMember = "ProductId"
        colProductIdCombo.DataPropertyName = "ProductId"
        colProductIdCombo.HeaderText = "ProductIdCombo"
        DataGridView1.Columns.Add(colProductIdCombo)

        Dim colProductId As New System.Windows.Forms.DataGridViewTextBoxColumn()
        colProductId.DataPropertyName = "ProductId"
        colProductId.HeaderText = "ProductId"
        DataGridView1.Columns.Add(colProductId)

        Dim colShelf As New System.Windows.Forms.DataGridViewTextBoxColumn()
        colShelf.DataPropertyName = "Shelf"
        colShelf.HeaderText = "Shelf"
        DataGridView1.Columns.Add(colShelf)

        Dim colQuantity As New System.Windows.Forms.DataGridViewTextBoxColumn()
        colQuantity.DataPropertyName = "Quantity"
        colQuantity.HeaderText = "Quantity"
        DataGridView1.Columns.Add(colQuantity)