点击 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