【问题标题】:Replacing a bound DataGridView column with a ComboBox用 ComboBox 替换绑定的 DataGridView 列
【发布时间】:2018-04-25 11:29:09
【问题描述】:

This MSDN article 建议可以使用您自己的数据更改自动生成的数据网格视图的内容并重新绑定其中一列,从而更改类型。但它并没有准确描述如何进行。有许多与此类似的问题,但其中大多数基本上指向 MSDN 资源,并且没有真正的指针如何准确地进行。最重要的是,尚不清楚在自定义列中设置哪些属性以确保其工作方式与自动生成的列相同。 This question 详细介绍了一个类似的问题,但这个例子根本不是最小的。

假设我们有以下东西(作为最低限度的例子):

  1. 包含一些 N 列的数据库表。其中一列包含 3 个不同的值。假设它是一个整数列,可以包含 0、1 或 2。
  2. 一个DataGridView,已作为数据源绑定到所述数据库表。

VB.NET 本身会生成一个textbox 列。由于这不是很用户友好,我想用一个 DataGridComboBoxColumn 替换它。怎么做呢?

【问题讨论】:

    标签: vb.net datagridview


    【解决方案1】:

    this answer 中所述,我设法创建了一个组合框列并使用以下示例数据填充它的“选项”(此处以 JSON 格式列出);

    [{"id": 0, "type": "never"},
     {"id": 1, "type": "always"}, 
     {"id": 2, "type": "sometimes"}]
    

    假设我们像这样绑定数据(myOptions 是一些帮助类,它返回上面的数据,作为两个类成员,id 和 type)。假设数据库表列名是'hasOption':

    myDataGridView.Columns.Remove("hasOption")
    Dim newColumn As New DataGridViewComboBoxColumn()
    newColumn.DataSource = myOptions.GetChoices()
    newColumn.DataPropertyName = "hasOption"
    newColumn.ValueMember = "id"
    newColumn.DisplayMember = "type"
    newColumn.Name = "hasOption"
    myDataGridView.Columns.Add(newColumn)
    

    这里的重要事实是:

    DataPropertyName必须与数据源列名(数据库表列名)完全匹配

    ValueMember 必须与包含组合框选项的值 (ID) 的列的名称相匹配。

    DisplayMember 必须与包含组合框选项的用户显示文本的列的名称相匹配。

    当使用选项列表(手动数据,因此组合框选项存储在数据库中时,这些选项成员(示例中为idtype)必须是实现为properties。将自定义列添加到DataGridView 时,仅使用公共类成员会导致奇怪的错误。

    value成员类的实现如下:

    Public Class myOptions
    Public Property type As String
    Public Property id As Integer
    Public Sub New(ByVal nType As String, ByVal nID As Integer)
        type = nType
        id = nID
    End Sub
    
    Private Shared allValues As List(Of myOptions) = New List(Of myOptions) From {
        New myOptions("never", 0),
        New myOptions("always", 1),
        New myOptions("sometimes", 2)
    }
    
    Public Shared Function GetChoices() As List(Of myOptions)
        Return allValues
    End Function
    End Class
    

    【讨论】:

      猜你喜欢
      • 2011-05-16
      • 2015-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-07
      • 2021-03-09
      相关资源
      最近更新 更多