绑定到 table 时如何将数据网格列设置为下拉列表

How to set a data grid column to be a drop down when binding to a table

我能够创建数据 table 并将其绑定到数据网格视图。如果可能的话,我想要更复杂的东西。我想将第一列的值限制为 1 到 12,将第二列的值限制为上午或下午。

提前致谢。

        mDataTable = GetTable()

            DataGridView1.DataSource = mDataTable


Function GetTable() As DataTable
        ' Create new DataTable instance.
        Dim table As New DataTable

        ' Create four typed columns in the DataTable.
        table.Columns.Add("Hour", GetType(Integer))
        table.Columns.Add("AM/PM", GetType(String))
        table.Columns.Add("Delete", GetType(Boolean))

        For i = 1 To mSchedules.Count
            table.Rows.Add(SetAMPMHour(mSchedules(i - 1).ScheduleINetHour), SetAMPM(mSchedules(i - 1).ScheduleINetHour), False)

        Next

        Return table
    End Function

如果 combobox column 将具有固定值,您可以在设计时或运行时手动定义这些值(尽管这两种方式都需要您设置 AutoGenerateColumns 属性到 False,然后再将数据绑定到网格)。

如果你想通过代码来完成,试试这个:

DataGridView1.AutoGenerateColumns = False
Dim hoursCol, timeOfDayCol As New DataGridViewComboBoxColumn
Dim deleteCol As New DataGridViewCheckBoxColumn

For i As Integer = 1 To 12
    hoursCol.Items.Add(i)
Next
timeOfDayCol.Items.Add("AM")
timeOfDayCol.Items.Add("PM")

hoursCol.DataPropertyName = "Hour"
timeOfDayCol.DataPropertyName = "AM/PM"
deleteCol.DataPropertyName = "Delete"

DataGridView1.Columns.Add(hoursCol)
DataGridView1.Columns.Add(timeOfDayCol)
DataGridView1.Columns.Add(deleteCol)

mDataTable = GetTable()
DataGridView1.DataSource = mDataTable

如果您想在设计时完成:

创建您的Combobox Column...

...将 DataPropertyName 设置为将绑定到该 GridView 列的 DataTable 列的名称,并在 Collection 中定义将填充 ComboBox

请记住,即使您在设计时定义值,您也必须在设置数据源之前以编程方式将 AutoGenerateColumns 设置为 False。此外,如果您在设计时创建一个 ComboBox 列,则必须用 String 值填充它。