我正在使用winforms来开发我的应用程序。 并且我将datagridview控件的selectionmode设置为“CellSelect”,这允许用户选择任意多个遍布多个列的单元格;但我想约束我的用户一次只能选择单列中的单元格,而且我没有任何这种选择模式。
所以如果我想实现它,我该如何扩展datagridview类? 我还认为,只要选择单元格被更改,我就可以检查eventhandler,通过这种方式我可能会让用户无法选择遍布多列的单元格,但我认为这不是那么好。
其他任何人都可以帮我找到更好的解决方案吗?
答案 0 :(得分:1)
您的实施没问题。这正是我所做的。最初我尝试处理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