.net datagrid 选择多行

王朝c#·作者佚名  2006-01-09
宽屏版  字体: |||超大  

功能:点击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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有