如何将DataGridViewComboBoxCell添加到绑定的DataGridView数据源(以编程方式)

时间:2014-02-05 16:24:45

标签: vb.net datagridview datatable datasource datagridviewcombobox

目标

我希望在使用DataView设置DataGridView的DataSource后有一个DataGridViewComboBoxCell。

DataGridView Goal


现状

当用户浏览BillDetails时,我有一个填充了Bills的DataTable。

我创建了一个DataView并将DataView的表设置为等于Bill Details的DataTable。然后我将DataGridView的DataSource设置为DataView。

设置DataGridView的数据源

Dim ViewContent As New DataView
ViewContent.Table = dsBillMat.Tables("dtBillDetails") 'Set the DataTable to my DataView's Table
ViewContent.RowFilter = "FK_BillHeader = '" & Bill.PK_BillHeader & "'" 'Filter the tables to get the correct Details for the corresponding Bill
dgvArticles.DataSource = ViewContent
FormatContentGridView() 'Formats the DataGridView Headers, Visible columns, etc.

FormatContentGridView

格式化我的DataGridView的代码。可能我需要为我的ComboBoxCell添加代码?

Private Sub FormatContentGridView()
    With dgvArticles
        'Hide columns
        .Columns("PK_BillDetail").Visible = False
        .Columns("FK_BillHeader").Visible = False

        'Header text
        .Columns("ILNum").HeaderText = "# IL"
        .Columns("ArtNum").HeaderText = "# Article"
        .Columns("Description").HeaderText = "Description"
        .Columns("PartNum").HeaderText = "# Pièce"
        .Columns("Quantity").HeaderText = "Qté."
        .Columns("Manufacturer").HeaderText = "Manufacturier"
        .Columns("ShippedLose").HeaderText = "Sép."
        .Columns("OnHand").HeaderText = "En Main"
        .Columns("RSPL").HeaderText = "RSPL"
        .Columns("Code").HeaderText = "Code"
        .Columns("Cost").HeaderText = "Coût ($)"

        'Widths
        .Columns("Description").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
        .Columns("Description").MinimumWidth = 150

        For Each c As DataGridViewColumn In dgvArticles.Columns
            If c.Visible And c.AutoSizeMode <> DataGridViewAutoSizeColumnMode.Fill Then
                c.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
            End If
        Next

        'Display Index
        .Columns("ILNum").DisplayIndex = 0
        .Columns("ArtNum").DisplayIndex = 1
        .Columns("Description").DisplayIndex = 2
        .Columns("PartNum").DisplayIndex = 3
        .Columns("Quantity").DisplayIndex = 4
        .Columns("Manufacturer").DisplayIndex = 5
        .Columns("ShippedLose").DisplayIndex = 6
        .Columns("OnHand").DisplayIndex = 7
        .Columns("RSPL").DisplayIndex = 8
        .Columns("Code").DisplayIndex = 9
        .Columns("Cost").DisplayIndex = 10
    End With
End Sub

这很有效,信息成功填充。我还没有我的ComboBoxCell。

Successful DataGridView Display


问题

我的问题是,我必须为Code列提供DataGridViewComboBoxCell(上面的红色矩形)。当使用DataSource的DataView创建列时,如何设置DataGridViewComboBoxCell?

2 个答案:

答案 0 :(得分:2)

在设计视图中,右键单击DataGridView并选择“编辑列”。找到要调整的列,然后在ColumnType下将其更改为DataGridViewComboBoxColumn。然后,您可以将DataSource和DisplayMembers设置为您需要的内容。

在运行时,您可以创建一个新列并隐藏上一列。

   Dim cboCode As New DataGridViewComboBoxColumn()
   cboCode.HeaderText = "Code"
   cboCode.DataPropertyName = "Code"
   cboCode.AutoSizeMode = DataGridViewAutoSizeColumnMode.NotSet
   cboCode.Name = "cboCode"
   cboCode.DataSource = dtData
   cboCode.DisplayMember = "Code"
   cboCode.ToolTipText = "the code for this account , blah, blah, blah"
   dgvArticles.Columns.Add(cboCode )
   .Columns("Code").visible = False

答案 1 :(得分:0)

我不确定这是否是发布此内容的正确位置,但现在就去了。我有完全相同的代码但是当我更新我的绑定源时,组合框值不会保存到我的数据库,直到我第二次输入值并运行我的保存代码