绑定到 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
值填充它。
我能够创建数据 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
值填充它。