【问题标题】:Changing the format of all cells in a datagridview to combobox将datagridview中所有单元格的格式更改为组合框
【发布时间】:2017-12-14 02:28:28
【问题描述】:

我有几个数据表。我遍历我拥有的数据表的数量。在循环中,我创建了一个 DataGridView,其数据源是该索引处的给定数据表。然后如何将列更改为 Combobox 类型?我知道如何在设计器上做到这一点,但是以编程方式呢?我试过了:

For each column as DataGridViewColumn in table.Columns
  column.CellType = DataGridViewComboBoxColumn
Next

显然这不起作用。 CellType 是一个只读属性,我不能简单地将其设置为类类型。我知道这可能很简单,我知道我很愚蠢。请帮忙。

【问题讨论】:

  • 您可以手动构建数据网格,而不是让数据源自动生成列。但是,您希望如何用数据填充组合框?
  • 每列都有关联的枚举。我将枚举定义为数组,然后将每个枚举添加到组合框项
  • 如果您希望您的 CBO 列执行类似显示枚举“名称”但将值返回给您的代码的操作,则每个 CBO 列都需要一个数据源,而不仅仅是添加到项目集合中的一些内容。
  • Here is some code 以编程方式(GridSetup 方法)构建 datagridview,如果您需要一些东西来帮助您入门。
  • @Crowcoder 您应该在 VB.NET 中发布一个示例,因为 OP 的代码在 VB 中。 Trowing 一些 C# 对 OP 没有帮助。

标签: vb.net datagridview


【解决方案1】:

您无需将整列定义为组合框。请参阅我的示例,其中您有一个组合框的定义,每行具有相同的值。我还提供了一种仅用组合框替换单个单元格的方法。看看“人”列是一个文本框列,我在其中放置了一个组合框。它还向您展示了如何分配值和设置默认值。复选框列/单元格的概念相同。

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim NewCol As New DataGridViewComboBoxColumn
        DataGridView1.Columns.Add(New DataGridViewTextBoxColumn With {.Name = "ID", .HeaderText = "ID"})
        With NewCol
            .Name = "ComboBoxCol"
            .HeaderText = "Language"
            .Items.Add("VB.NET")
            .Items.Add("C#")
            .Items.Add("F#")
            .DefaultCellStyle.NullValue = .Items(0)
        End With
        DataGridView1.Columns.Add(NewCol)
        DataGridView1.Columns.Add(New DataGridViewTextBoxColumn With {.Name = "PeopleCol", .HeaderText = "People"})
        Dim xRow As String() = {"1"}
        DataGridView1.Rows.Add(xRow)
        DataGridView1.Rows.Add({"2"})
        DataGridView1(1, 0).Value = "C#"
        Dim xPeople1 As New DataGridViewComboBoxCell
        With xPeople1
            .Items.Add("Santa")
            .Items.Add("Satan")
            .Value = .Items(0)
        End With
        DataGridView1(2, 0) = xPeople1

        Dim xPeople2 As New DataGridViewComboBoxCell
        With xPeople2
            .Items.Add("God")
            .Items.Add("Allah")
            .Value = .Items(1)
        End With
        DataGridView1(2, 1) = xPeople2
    End Sub
End Class

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多