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

时间:2015-06-05 20:36:26

标签: vb.net datagridview datagridviewcolumn datagridviewcomboboxcell

我能够创建数据表并将其绑定到datagridview。如果可能,我想要更复杂的东西。我想将第一列限制为值1到12,将第二列限制为AM或PM。

提前致谢。

        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

1 个答案:

答案 0 :(得分:0)

如果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 ...

ComboBox Column

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

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