点击 Listview 取得 行 列 位置 复制行 列内容 导出 csv vb.net

点击 Listview 取得 行 列 位置 并 复制列内容 vb.net

    Dim m_MBRpt As Point
    Private Sub COPYCOLUMN_Click(sender As Object, e As EventArgs) Handles COPYCOLUMN.Click
        Try
            Dim hti As ListViewHitTestInfo = ListView1.HitTest(m_MBRpt)
            If hti.Item Is Nothing Then Return
            Dim WRow As Integer = hti.Item.Index
            Dim WColumn As Integer = hti.Item.SubItems.IndexOf(hti.SubItem)

            Dim ColumnArr(ListView1.Items.Count - 1) As String
            For i = 0 To ListView1.Items.Count - 1
                ColumnArr(i) = ListView1.Items(i).SubItems(WColumn).Text
            Next
            Dim strText As String = Join(ColumnArr, vbCrLf)
            With My.Computer.Clipboard
                .Clear()
                .SetText(strText)
            End With
        Catch ex As Exception
            MessageBox.Show(ex.Message & vbCrLf & ex.StackTrace)
        End Try
    End Sub
    Private Sub ListView1_MouseClick(sender As Object, e As MouseEventArgs) Handles ListView1.MouseClick, ListView1.MouseDown
        m_MBRpt = ListView1.PointToClient(Control.MousePosition)
    End Sub

复制行内容:

    Private Sub Copyselectedline_Click(sender As Object, e As EventArgs) Handles COPYLINE.Click
        Try
            If ListView1.SelectedItems.Count <= 0 Then
                Return
            End If
            Dim Linedetails As ListView.SelectedListViewItemCollection = Me.ListView1.SelectedItems
            Dim item As ListViewItem
            Dim itemarray(6) As String
            For Each item In Linedetails
                For i = 0 To item.SubItems.Count - 1
                    If i = 0 Then
                        ReDim itemarray(item.SubItems.Count)
                    End If
                    itemarray(i) = CStr(item.SubItems(i).Text)
                Next
            Next
            With My.Computer.Clipboard
                .Clear()
                .SetText(Join(itemarray, vbTab))
            End With
        Catch ex As Exception
            MessageBox.Show(ex.Message & vbCrLf & ex.StackTrace)
        End Try
    End Sub

导出listview内容到CSV文件:

Private Sub Exportall_Click(sender As Object, e As EventArgs) Handles EXPALL.Click
        Try
            Dim sfd As New SaveFileDialog With {
                .Title = "Choose file to Save to",
                .FileName = "BIDATA.csv",
                .Filter = "CSV (*.csv)|*.csv",
                .FilterIndex = 0,
                .InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)}

            If sfd.ShowDialog = DialogResult.OK Then

                Dim headers = (From ch In ListView1.Columns
                               Let header = DirectCast(ch, ColumnHeader)
                               Select header.Text).ToArray()

                Dim items() = (From item In ListView1.Items
                               Let lvi = DirectCast(item, ListViewItem)
                               Select (From subitem In lvi.SubItems
                                       Let si = DirectCast(subitem, ListViewItem.ListViewSubItem)
                                       Select si.Text).ToArray()).ToArray()

                Dim table As String = String.Join(",", headers) & Environment.NewLine
                For Each a In items
                    For i = LBound(a) To UBound(a)
                        If InStr(a(i), ",") > 0 Or InStr(a(i), Chr(34)) > 0 Then
                            a(i) = Chr(34) & Replace(a(i), Chr(34), Chr(34) & Chr(34)) & Chr(34)
                        End If
                    Next i
                    table &= String.Join(",", a) & Environment.NewLine
                Next
                table = table.TrimEnd(CChar(vbCr), CChar(vbLf))
                IO.File.WriteAllText(sfd.FileName, table, Encoding.UTF8)
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message & vbCrLf & ex.StackTrace)
        End Try
    End Sub
删除项目
	Private Sub Button2_Click(sender As Object,e As EventArgs) Handles Button2.Click
        '将选中的项目逐一删除
        For i As Integer = ListView1.SelectedItems.Count - 1 To 0 Step -1
            ListView1.Items.RemoveAt(ListView1.SelectedItems(i).Index)
        Next
    End Sub

点击表头排序:

    Dim sortColumn As Integer = -1
    Class ListViewItemComparer
        Implements IComparer
        Private col As Integer
        Private order As SortOrder
        Public Sub New()
            col = 0
            order = SortOrder.Ascending
        End Sub
        Public Sub New(column As Integer, order As SortOrder)
            col = column
            Me.order = order
        End Sub
        Public Function Compare(x As Object, y As Object) As Integer _
                        Implements System.Collections.IComparer.Compare
            Dim returnVal As Integer = -1
            returnVal = [String].Compare(CType(x,
                        ListViewItem).SubItems(col).Text,
                        CType(y, ListViewItem).SubItems(col).Text)
            ' Determine whether the sort order is descending.
            If order = SortOrder.Descending Then
                ' Invert the value returned by String.Compare.
                returnVal *= -1
            End If

            Return returnVal
        End Function
    End Class
    Private Sub ListView1_ColumnClick(sender As Object, e As ColumnClickEventArgs) Handles ListView1.ColumnClick
        Try
            Dim cheadertext As String = ListView1.Columns.Item(e.Column).Text
            If e.Column <> sortColumn Then
                ' Set the sort column to the new column.
                sortColumn = e.Column
                ' Set the sort order to ascending by default.
                ListView1.Sorting = SortOrder.Ascending
            Else
                ' Determine what the last sort order was and change it.
                If ListView1.Sorting = SortOrder.Ascending Then
                    ListView1.Sorting = SortOrder.Descending
                Else
                    ListView1.Sorting = SortOrder.Ascending
                End If
            End If
            ' Call the sort method to manually sort.
            ListView1.Sort()
            ' Set the ListViewItemSorter property to a new ListViewItemComparer
            ' object.
            ListView1.ListViewItemSorter = New ListViewItemComparer(e.Column, ListView1.Sorting)
        Catch ex As Exception
            MessageBox.Show(ex.Message & vbCrLf & ex.StackTrace)
        End Try
    End Sub
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值