是否可以在同一gridview中从另一个下拉列表中选择索引更改方法更改gridview中下拉列表的数据源?
例如我有一个下拉列表需要根据gridview的前一个单元格中选择的内容来更改其内容,这也是一个下拉列表。
非常感谢任何帮助
谢谢
答案 0 :(得分:1)
而不是在第一次DataSource
更改时更改DropDownList.SelectedIndex
,而是可以在编辑时设置第二个DataSource
的{{1}}。
可以找到如何实现这一目标的示例here。
在本文中,作者挂钩DropDownList
事件以更改EditingControlShowing
的类型。这可以很容易地修改为改为ComboBox
而不是:
DataSource
答案 1 :(得分:0)
以下是另一种方式,例如:两列(类型,天),如果用户下拉并选择'周',则第二个组合填充工作日,否则,周末。
出于此示例的目的,添加一个带有两个ComboBoxCell列的网格(DataGridView1),并让第一列包含以下项目:week,weekend。
这个类将是我们的数据源:
Class WeekDataItem
Sub New(ByVal id As Integer, ByVal name As String)
Me.ID = id
Me.Name = name
End Sub
Public Property ID() As Integer
Get
Return _ID
End Get
Set(ByVal value As Integer)
_ID = value
End Set
End Property
Private _ID As Integer
Public Property Name() As String
Get
Return _Name
End Get
Set(ByVal value As String)
_Name = value
End Set
End Property
Private _Name As String
End Class
此功能将根据可以是“周”或“周末”的键返回我们的数据源:
Function getWeekDataSource(ByVal key As String) As List(Of WeekDataItem)
getWeekDataSource = New List(Of WeekDataItem)
If (key = "week") Then
getWeekDataSource.Add(New WeekDataItem(1, "monday"))
getWeekDataSource.Add(New WeekDataItem(2, "tuesday"))
getWeekDataSource.Add(New WeekDataItem(3, "wednesday"))
getWeekDataSource.Add(New WeekDataItem(4, "thrusday"))
getWeekDataSource.Add(New WeekDataItem(5, "friday"))
ElseIf (key = "weekend") Then
getWeekDataSource.Add(New WeekDataItem(6, "caturday"))
getWeekDataSource.Add(New WeekDataItem(7, "sunday"))
End If
End Function
最后,当Type组合值更改时会触发此事件,并将相应的数据源分配给我们的日期组合:
Private Sub DataGridView1_CellValueChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged
' if the type dropdown value changed
If (e.ColumnIndex = clmTypes.Index) Then
' set the week dropdown data source for the current row
If Not IsNothing(DataGridView1.CurrentRow) Then
' get the combobox cell we want to change
Dim comboCell As DataGridViewComboBoxCell
comboCell = CType(DataGridView1.CurrentRow.Cells(clmDays.Index), DataGridViewComboBoxCell)
' assign it's new data source
comboCell.DataSource = getWeekDataSource(CStr(DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex).Value))
' update the data source members so it displays info properly
comboCell.DisplayMember = "Name"
comboCell.ValueMember = "ID"
End If
End If
End Sub
请注意,在验证单元格后,即一旦您关闭单元格,就会触发此事件。
答案 2 :(得分:0)
完全有可能。如何填充下拉列表?如果所有数据都是动态的,则每次更改下拉列表选定项时都必须重建整个网格。
如果我没错,您正在尝试应用过滤机制。你是 ?我过去做的另一种方法是从GridView的行构建DropDownList的数据源。想想您在屏幕上已有的数据。进入PreRender功能后,您可以在下拉列表中绑定所需的数据,这样就可以减少负载。