Vb.net 如何将DataGridViewComboxCell添加到绑定的DataGridView数据源(以编程方式) 目标

Vb.net 如何将DataGridViewComboxCell添加到绑定的DataGridView数据源(以编程方式) 目标,vb.net,datagridview,datatable,datasource,datagridviewcombobox,Vb.net,Datagridview,Datatable,Datasource,Datagridviewcombobox,在用DataView设置DataGridView的数据源之后,我想要一个DataGridViewComboxCell 现状 我有一个数据表,当用户浏览他的账单时,它填充了BillDetails 我创建了一个DataView,并将DataView的表设置为等于账单明细的DataTable。然后,我将DataGridView的数据源设置为DataView 设置DataGridView的数据源 Dim ViewContent As New DataView ViewContent.Table =

在用DataView设置DataGridView的数据源之后,我想要一个DataGridViewComboxCell


现状 我有一个数据表,当用户浏览他的
账单时,它填充了
BillDetails

我创建了一个DataView,并将DataView的表设置为等于账单明细的DataTable。然后,我将DataGridView的数据源设置为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
私有子格式ContentGridView()
用dgvArticles
'隐藏列
.Columns(“PK_BillDetail”).Visible=False
.Columns(“FK_BillHeader”).Visible=False
'标题文本
.Columns(“ILNum”).HeaderText=“#IL”
.Columns(“ArtNum”).HeaderText=“#Article”
.Columns(“Description”).HeaderText=“Description”
.Columns(“PartNum”).HeaderText=“#Pièce”
.Columns(“数量”).HeaderText=“Qté。”
.Columns(“制造商”).HeaderText=“制造商”
.Columns(“ShippedLose”).HeaderText=“Sép.”
.Columns(“手头”).HeaderText=“En Main”
.Columns(“RSPL”).HeaderText=“RSPL”
.Columns(“代码”).HeaderText=“代码”
.Columns(“成本”).HeaderText=“Coút($)”
“宽度
.Columns(“Description”).AutoSizeMode=DataGridViewAutoSizeColumnMode.Fill
.列(“说明”)。最小宽度=150
对于dgvArticles.Columns中的每个c作为DataGridViewColumn
如果c.Visible和c.AutoSizeMode DataGridViewAutoSizeColumnMode.Fill,则
c、 AutoSizeMode=DataGridViewAutoSizeColumnMode.AllCells
如果结束
下一个
'显示索引
.Columns(“ILNum”).DisplayIndex=0
.Columns(“ArtNum”).DisplayIndex=1
.列(“说明”).DisplayIndex=2
.Columns(“PartNum”).DisplayIndex=3
.列(“数量”).DisplayIndex=4
.列(“制造商”).DisplayIndex=5
.Columns(“ShippedLose”).DisplayIndex=6
.列(“现有”).DisplayIndex=7
.Columns(“RSPL”).DisplayIndex=8
.列(“代码”).DisplayIndex=9
.列(“成本”).DisplayIndex=10
以
端接头
这非常有效,信息填充成功。我只是还没有手机


问题
我的问题是,代码列必须有一个DataGridViewComboxCell(上面的红色矩形)。当已使用数据源的DataView创建列时,如何设置DataGridViewComboxCell?

在设计视图中,右键单击DataGridView并选择编辑列。找到要调整的列,然后在ColumnType下,将其更改为DataGridViewComboBoxColumn。然后可以根据需要设置数据源和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

我不确定这是否是发布这篇文章的正确地方,但现在开始。我得到了完全相同的代码,但当我更新绑定源时,组合框值不会保存到数据库中,直到第二次输入值并运行保存代码时,我的DataGridView在设计时才没有列。它们由数据表的列填充。不幸的是,我不能这样做。请参阅上面的运行时解决方案。我留下了设计时解决方案,以防其他人需要。几乎就在那里。。。如何将值应用于该列;如果DataView在FormatContentGridView之前设置为DataGridView的数据源?(我将以下代码放在FormatContentGridView中)@Alex,基本上是通过将新列的DataPropertyName设置为所需的基础数据源列。因此,从技术上讲,您现在有两列,其中包含相同的数据;隐藏的文本字段和可见的组合框,两者都显示dataTable中的“Code”列。(两个字段都会随着其中一个字段的更改而更新)。如何“更新绑定源”?通过什么事件使ComboBox值在DataGridView中引发触发器?一旦找到,就可以使用新值更新DataTable。但是顺便说一句,我建议你删除你的答案,因为你可能会因为发布问题/评论作为答案而被“标记”。我知道你没有足够的声誉发表评论,但是。。。不幸的是,这就是它的工作原理:s