.net datagrid 选择多行

功能:点击datagrid并且按住键盘上的ctrl或shift可选择多行

Public Class MyDataGridCLASS
Inherits DataGrid
Private m As New ArrayList

Public ReadOnly Property MultiSelectedIndex() As Integer()
Get
Return m.ToArray(GetType(Integer))
End Get
End Property

Protected Overrides Sub OnMouseDown(ByVal e As System.Windows.Forms.MouseEventArgs)
Debug.WriteLine("DataGrid has hit")
Dim posdg As Point = New Point(e.X, e.Y)
Dim hitDG As DataGrid.HitTestInfo = HitTest(posdg)
If HitDataGrid(hitDG) Then
MyBase.OnMouseDown(e)
Debug.WriteLine("Mousedown has gogogo.....")
End If
End Sub

Private Function HitDataGrid(ByVal Hit As DataGrid.HitTestInfo) As Boolean
Try
Select Case Me.ModifierKeys
Case Keys.Control
If Hit.Row > -1 Then
If m.IndexOf(Hit.Row) > -1 Then
m.Remove(Hit.Row)
Me.UnSelect(Hit.Row)
Else
m.Add(Hit.Row)
Me.Select(Hit.Row)
End If
End If
Return False
Case Keys.Shift
If Hit.Row > -1 Then
For Each IndexOld As Integer In m
Me.UnSelect(IndexOld)
Next
m.Clear()
Dim i, intStep As Integer
If Hit.Row > Me.CurrentRowIndex Then
intStep = 1
Else
intStep = -1
End If
For i = Me.CurrentRowIndex To Hit.Row Step intStep
m.Add(i)
Me.Select(i)
Next
End If
Return False
Case Else
For Each index As Integer In m
Me.UnSelect(index)
Next
m.Clear()
If Hit.Type = DataGrid.HitTestType.RowHeader Then
m.Add(Hit.Row)
End If
Return True
End Select
Catch ex As Exception
Debug.WriteLine(ex.ToString)
End Try
End Function
End Class

Published At
Categories with Web编程
Tagged with
comments powered by Disqus