数据绑定DataGridView中的ComboBox列

Pow*_*015 1 vb.net data-binding datagridview

我又回来了另一个DataGidView问题

我正在创建一个应用程序,允许用户为购买的产品创建票证

此表单由DataGidView组成,允许用户记录产品详细信息以及价格和数量信息.

目前,DataGidView是数据绑定的,并且在运行时使用数据适配器和命令构建器保存数据

列自动创建,然后我设置格式选项等属性,如下所示

Private Sub SetTicketList()

    Try
        Con.ConnectionString = CropTrackMod.strConn
        SQLAdaptor.SelectCommand = New SqlClient.SqlCommand("SELECT ID, StockRef, Weight, EstimatedPrice, DespatchedQuantity,EstimatedTransportPer,VATRate, EstimatedTransportTotal,EstimatedVAT, EstimatedLineTotal,TicketRef FROM TicketDetail where ticketref ='x'", Con)
        builder = New SqlClient.SqlCommandBuilder(SQLAdaptor)
        Con.Open()

        Dim myTable As DataTable = New DataTable
        SQLAdaptor.Fill(myTable)

        dgvTicketDetail.DataSource = myTable

        'ID Column
        dgvTicketDetail.Columns(0).Visible = False

        'StockRef
        dgvTicketDetail.Columns(1).HeaderText = "StockRef"
        dgvTicketDetail.Columns(1).CellType.

        'Weight
        dgvTicketDetail.Columns(2).HeaderText = "Weight"
        dgvTicketDetail.Columns(2).DefaultCellStyle.Format = "0"
        dgvTicketDetail.Columns(2).DefaultCellStyle.NullValue = "0"

        'Price Per Unit
        dgvTicketDetail.Columns(3).HeaderText = "Price"
        dgvTicketDetail.Columns(3).DefaultCellStyle.Format = "0.00"
        dgvTicketDetail.Columns(3).DefaultCellStyle.NullValue = "0.00"

        'Quantity
        dgvTicketDetail.Columns(4).HeaderText = "Quantity"
        dgvTicketDetail.Columns(4).DefaultCellStyle.Format = "0"
        dgvTicketDetail.Columns(4).DefaultCellStyle.NullValue = "0"

        'Transport Cost Per Unit
        dgvTicketDetail.Columns(5).HeaderText = "TransportCostPer"
        dgvTicketDetail.Columns(5).DefaultCellStyle.Format = "0.00"
        dgvTicketDetail.Columns(5).DefaultCellStyle.NullValue = "0.00"

        'VAT Rate
        dgvTicketDetail.Columns(6).HeaderText = "VAT Rate"
        dgvTicketDetail.Columns(6).DefaultCellStyle.Format = "0.00"
        dgvTicketDetail.Columns(6).DefaultCellStyle.NullValue = "0.00"
        dgvTicketDetail.Columns(6).ReadOnly = True

        'Transport Total
        dgvTicketDetail.Columns(7).HeaderText = "Transport Total"
        dgvTicketDetail.Columns(7).DefaultCellStyle.Format = "0.00"
        dgvTicketDetail.Columns(7).DefaultCellStyle.NullValue = "0.00"
        dgvTicketDetail.Columns(7).ReadOnly = True

        'VAT Total
        dgvTicketDetail.Columns(8).HeaderText = "VAT Total"
        dgvTicketDetail.Columns(8).DefaultCellStyle.Format = "0.00"
        dgvTicketDetail.Columns(8).DefaultCellStyle.NullValue = "0.00"
        dgvTicketDetail.Columns(8).ReadOnly = True

        'line Total
        dgvTicketDetail.Columns(9).HeaderText = "Total"
        dgvTicketDetail.Columns(9).DefaultCellStyle.Format = "0.00"
        dgvTicketDetail.Columns(9).DefaultCellStyle.NullValue = "0.00"
        dgvTicketDetail.Columns(9).ReadOnly = True


        'line Total
        dgvTicketDetail.Columns(10).HeaderText = "TicketRef"
        dgvTicketDetail.Columns(10).Visible = False
    Finally
        If Con.State = ConnectionState.Open Then
            Con.Close()
        End If
    End Try

End Sub
Run Code Online (Sandbox Code Playgroud)

其中一列用于库存参考,在我能够自由输入该字段的那一刻,但最终我希望这是一个组合框列,用户可以从另一个表的库存参考列表中进行选择.

我已经研究过这个问题,并且已经发现了许多与在运行时创建列有关的示例,但我不觉得这会在这种情况下工作,好像我手动创建了列然后这不会绑定到我想要的数据源将信息保存到.

手册栏创作

Dim dgvc As DataGridViewComboBoxCell
dgvc = DataGridView1.Rows(0).Cells(2)

if DataGridView1.Rows(0).Cells(1).Value = "Jack" then
    dgvc.Items.Add("Fe")
    dgvc.Items.Add("Fi")
elseif DataGridView1.Rows(0).Cells(3).Value = "Giant" then
    dgvc.Items.Add("Fo")
    dgvc.Items.Add("Fum")
End if
Run Code Online (Sandbox Code Playgroud)

我最初计划手动将项目添加到组合框中,但我已经看到了能够对项目进行数据绑定的示例.我想这是另一个问题

任何帮助总是受到赞赏.

先谢谢你们

小智 5

我刚刚做了类似的事情,我感觉更灵活,这是受到启发的,所以我想我会分享.主要优点是您无需关闭列的自动生成.这是在我已经将datagridviews(dgvPickList)数据源设置为数据表并且还在数据表dtLocations中加载我的位置列表之后.它取代了第二列,它被绑定到"位置"字段

Dim comboBoxColumn As DataGridViewComboBoxColumn = New DataGridViewComboBoxColumn()
comboBoxColumn.HeaderText = "Location"
comboBoxColumn.DataPropertyName = "Location"
comboBoxColumn.DataSource = dtLocations
comboBoxColumn.ValueMember = dtLocations.Columns(0).ColumnName
comboBoxColumn.DisplayMember = dtLocations.Columns(1).ColumnName

dgvPickList.Columns.RemoveAt(1)
dgvPickList.Columns.Insert(1, comboBoxColumn)
Run Code Online (Sandbox Code Playgroud)

希望这很有用.