明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

.net datagrid 選擇多行

[摘要]功能:點(diǎn)擊datagrid并且按住鍵盤(pán)上的ctrl或shift可選擇多行 Public Class MyDataGridCLASS Inherits DataGrid Private m As New ArrayList Public ReadOnly Property Mult...
  功能:點(diǎn)擊datagrid并且按住鍵盤(pán)上的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





標(biāo)簽:.net datagrid 選擇多行 

相關(guān)文章