#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)