Как сделать так, чтобы в datagridview можно было выбирать только ячейки в одном столбце одновременно? - PullRequest
4 голосов
/ 20 марта 2010

Я использую winforms для разработки своего приложения. И я установил режим выбора элемента управления datagridview на «CellSelect», и это позволяет пользователю выбирать столько ячеек, сколько он хочет, которые распределены по нескольким столбцам; но я хочу ограничить, чтобы мой пользователь мог выбирать ячейки только в одном столбце за раз, и такого режима выбора для меня не существует.

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

Могут ли другие люди помочь мне найти лучшее решение?

1 Ответ

1 голос
/ 20 марта 2010

Ваша реализация в порядке. Это именно то, что я сделал. Первоначально я пытался разобраться с методами SetSelected ... Core, но детали стали громоздкими. Я остановился на следующем, потому что 1) он работает с небольшим кодом, 2) не мешает другому коду и 3) просто.

Public Class DataGridView
    Inherits System.Windows.Forms.DataGridView

    Protected Overrides Sub OnSelectionChanged(ByVal e As System.EventArgs)
        Static fIsEventDisabled As Boolean

        If fIsEventDisabled = False Then

            If Me.SelectedCells.Count > 1 Then
                Dim iColumnIndex As Integer = Me.SelectedCells(0).ColumnIndex
                fIsEventDisabled = True
                ClearSelection()
                SelectColumn(iColumnIndex) 'not calling SetSelectedColumnCore on purpose
                fIsEventDisabled = False
            End If

        End If

        MyBase.OnSelectionChanged(e)

    End Sub

    Public Sub SelectColumn(ByVal index As Integer)
        For Each oRow As DataGridViewRow In Me.Rows
            If oRow.IsNewRow = False Then
                oRow.Cells.Item(index).Selected = True
            End If
        Next
    End Sub

End Class
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...