Gridviews和DropdownLists

时间:2009-11-16 13:54:35

标签: vb.net gridview drop-down-menu selectedindex

是否可以在同一gridview中从另一个下拉列表中选择索引更改方法更改gridview中下拉列表的数据源?

例如我有一个下拉列表需要根据gridview的前一个单元格中选择的内容来更改其内容,这也是一个下拉列表。

非常感谢任何帮助

谢谢

3 个答案:

答案 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功能后,您可以在下拉列表中绑定所需的数据,这样就可以减少负载。