【问题标题】:DataGridComboBoxCell - Can't Fill Values ProgrammaticallyDataGridComboBoxCell - 无法以编程方式填充值
【发布时间】:2019-03-16 17:39:27
【问题描述】:

我正在用 2 列填充 DataGridView,DataGridViewTextBoxColumn 用于名称标签,DataGridViewComboBoxColumn 充当下拉列表,用于选择要映射到名称的 SQL 列名称。

我将遍历我的名字,并为每个名字创建一行。每一行都应该显示一个字段的名称(String 对象),另一列应该是一个组合框(值在 List (Of String) 内)。我不断收到一个异常,提示“该值无效”:

For Each sourceColumn As String In sourceColumnList
    Dim item As New DataGridViewTextBoxCell
    Dim destcombo As New DataGridViewComboBoxCell
    item.Value = sourceColumn
    destcombo.Items.AddRange(sqlColumnSelectionList.ToArray())

    '    ERROR IS HERE, REFERRING TO INVALID COMBO BOX |
    '                                                 \|/
    list_Destination_SQLMap.Rows.Add(sourceColumn, destcombo)
Next

我在 Google 上四处搜索,但只能找到一些示例,说明如何使用已绑定而非未绑定的数据源解决此问题。我知道我遗漏了一些东西,这是我第一次使用DataGridView

【问题讨论】:

  • 能否请您包括如何将列添加到 DataGridView?
  • 我当然会!但我不是以编程方式添加列。它们将始终保持不变(第一列包含源字段名称,第二列包含下拉列表,包括目标 SQL 表中的列列表)所以我通过添加它们。表单设计器。

标签: vb.net datagridview datagridcomboboxcolumn


【解决方案1】:

添加DataGridViewComboBoxColumn 时,您还需要将其DataSource 属性设置为有效来源。 DataTable 如果您从数据库或 List (Of T) 获取数据 - 您的 List (Of String) 将正常工作。

在您创建并填充sqlColumnSelectionList 之后添加下面的代码。 (不要忘记将变量名 column2 更改为您命名的任何名称)

column2.DataSource = sqlColumnSelectionList

请务必记住,在初始化和一般使用方面,DataGridViewComboBox 的工作方式与普通的 ComboBox 相同。

完成后,在添加行时,您应该更改此行:

list_Destination_SQLMap.Rows.Add(sourceColumn, destcombo)

成为:

list_Destination_SQLMap.Rows.Add(sourceColumn, "")

这会将新行添加到 DataGridView,其中 Text 列中的条目与字段名称匹配(根据您的描述),第二列将为空白,允许用户从下拉列表中选择值。

如果您需要将第二列预选为某个值,请将空字符串替换为该值。

DataGridViewComboBoxColumn 只需填充一次,而不是每次向 DataGridView 添加新单元格时。

【讨论】:

  • 非常感谢!这正是我需要的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-04
  • 2015-12-13
  • 1970-01-01
  • 1970-01-01
  • 2019-12-12
相关资源
最近更新 更多