Gridviews и DropdownLists - PullRequest
       33

Gridviews и DropdownLists

1 голос
/ 16 ноября 2009

Можно ли изменить источник данных раскрывающегося списка в виде сетки из другого раскрывающегося списка, выбранный метод изменения индекса в том же виде сетки?

например, у меня есть раскрывающийся список, который должен изменить его содержимое в зависимости от того, что выбрано в предыдущей ячейке таблицы, которая также является раскрывающимся списком.

Любая помощь будет высоко ценится

Спасибо

Ответы [ 3 ]

1 голос
/ 16 ноября 2009

Вместо изменения DataSource при изменении 1-го DropDownList.SelectedIndex вы можете установить DataSource для 2-го DropDownList при редактировании.

Пример того, как этого можно достичь, можно найти здесь .

В этой статье автор подключается к событию EditingControlShowing, чтобы изменить тип ComboBox. Это можно легко изменить, чтобы изменить DataSource вместо:

Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing
  ' make sure we are editing the 2nd ComboBox:'
  Dim comboBoxColumn2 As DataGridViewComboBoxColumn = DataGridView1.Columns(2)
  If (DataGridView1.CurrentCellAddress.X = comboBoxColumn2.DisplayIndex) Then
    'here you retrieve the value of the 1st ComboBox:'
    Dim comboBox1Value As object = DataGridView1.SelectedRow... 'fill with whatever is needed'
    Dim cb As ComboBox = e.Control
    If (cb IsNot Nothing) Then
      cb.DataSource = Nothing 'maybe not needed, I'm not sure
      cb.DataSource = 'here, set the data source based on the value of ComboBox1'
    End If
  End If
End Sub
0 голосов
/ 15 декабря 2009

Это вполне возможно. Как заполняются ваши выпадающие списки? Если все данные являются динамическими, вам придется перестраивать всю сетку каждый раз, когда вы изменяете выбранный элемент в раскрывающемся списке.

Если я не ошибаюсь, вы пытаетесь применить механизм фильтра. Ты ? Еще один способ, который я сделал в прошлом, - это построить мой источник данных для DropDownList из строк GridView. Подумайте о данных, которые у вас уже есть на экране. Как только вы перейдете в PreRender Function, вы сможете связать необходимые данные в выпадающем списке, таким образом вы отключите нагрузку.

0 голосов
/ 25 ноября 2009

Вот еще один способ, как я мог бы сделать это, например: два столбца (Типы, Дни), если пользователь выпадает из списка и выбирает «неделя», вторая комбинация заполняется днями недели, иначе - выходными. *

В этом примере добавьте сетку (DataGridView1) с двумя столбцами ComboBoxCell, и пусть первый столбец будет содержать следующие элементы: неделя, выходные.

Этот класс будет нашим источником данных:

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

И, наконец, это событие сработает при изменении значения поля «Тип» и назначит соответствующий источник данных нашему списку дней:

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

Обратите внимание, что это событие возникает после проверки ячейки, т. Е. После того, как вы покинули ячейку.

...