vb.net - 如何在运行时在DatagridView的DatagridViewComboboxColumn中添加Item

标签 vb.net

我有一个包含三列的 datagridview,它是使用 Datareader 填充的。 datagridView 中有一个 DatagridViewComboboxcolumn

我希望这个 DatagridViewComboboxcolumn 也应该使用数据读取器填充。

请建议我如何使用 Datareader 将项目添加到 DatagridViewComboboxcolumn。 下面是我尝试过的代码。

这里的 dr 是 SqlDatareader

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

但是当我以这种方式添加时,我在 DatagridViewComboboxcolumn 列上收到错误。 请提出建议

最佳答案

如前所述,您无法将 DataGridViewColumn 的 DataSource 设置为 DataReader(因为这是仅向前的数据库连接对象)。但是,您可以做的是填充 DataTable 并将 DataGridViewColumn 上的 DataSource 设置为此 DataTable。您还需要设置 DataPropertyName(这是 DataGridView 数据源的列名称)、ValueMemeber 和 DisplayMember。下面的示例使用 Adventureworks DB 并用 4 列填充 DataGridView(其中一列是组合框 - ProductIdCombo)。只需创建一个表单,在其上放置一个名为 DataGridView1 的 DataGridGridView 控件,然后运行以下命令。 ProductId 列表明绑定(bind)到组合的基础列(ProductIdCombo 列)确实正在更新 dtProductsInventory 数据表中的 ProductId 字段。

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

        Using objSqlServer As New System.Data.SqlClient.SqlConnection("Server=LOCALHOST\SQLEXPRESS; 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)

关于vb.net - 如何在运行时在DatagridView的DatagridViewComboboxColumn中添加Item,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7753536/

相关文章:

c# - HttpWebRequest 到 HttpClient post 请求

c# - 向 ProcessStartInfo 添加附加参数

.net - 在多行文本框中格式化字符串

asp.net - 如何从 asp.net 网页中的 xml 文件调用节点

jquery - vb.net 网络服务

javascript - 有条件地显示和隐藏从数据库生成的选择输入选项?

vb.net - 在 ASPX 页面中使用 webmethod 服务 AJAX 请求

c# - 当我尝试在 Visual Studio 2010 中添加 Web 服务时遇到问题

vb.net - Intergraph SmartMarine 符号创建

vb.net - Visual Basic 循环并一次显示一行