如何使用外部組件排序列表視圖值?這意味着,用戶不要點擊listview的標題,而是選擇服務於用戶可以排序的某個標題的組合框值。我在列表視圖中有大約6列。我只需要通過選擇組合框來排序此列表視圖,然後我將編寫一個代碼來對基於combobox1.text的列表視圖進行排序。任何想法?使用組合框排序列表視圖
0
A
回答
0
您需要編寫一個實現System.Collection.IComparer, 的類,並根據您的下拉值具有您的比較規則。 然後你需要用你寫的比較器的實例設置listview ListViewItemSorter屬性,並將其稱爲Sort方法。
0
我終於找到了我的問題的一些答案。而我所要做的就是在我的評論中創建另一個IComparer類,就像@zohar建議的那樣。請在下面找到我的答案: 我的listview名稱是lvshop。
在類的頂部,這樣聲明:
Imports System
Imports System.Windows.Forms
Imports System.Drawing
Imports System.Collections
在類中,聲明如下:
Private m_SortingColumn As ColumnHeader
在Windows負載,我創建了一個列標題:
lvShop.View = View.Details
lvShop.Columns.Add("Shop No", 70, HorizontalAlignment.Left)
lvShop.Columns.Add("Shop Name", 170, HorizontalAlignment.Left)
lvShop.Columns.Add("Shop Details", 500, HorizontalAlignment.Left)
lvShop.Columns.Add("Category", 100, HorizontalAlignment.Left)
lvShop.Columns.Add("Website", 170, HorizontalAlignment.Left)
lvShop.Columns.Add("Phone No", 100, HorizontalAlignment.Left)
在listview事件
Private Sub lvShop_ColumnClick(ByVal sender As Object, ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles lvShop.ColumnClick
Dim new_sorting_column As ColumnHeader = lvShop.Columns(e.Column)
Try
' Figure out the new sorting order.
Dim sort_order As System.Windows.Forms.SortOrder
If m_SortingColumn Is Nothing Then
' New column. Sort ascending.
sort_order = SortOrder.Ascending
Else
' See if this is the same column.
If new_sorting_column.Equals(m_SortingColumn) Then
' Same column. Switch the sort order.
If m_SortingColumn.Text.StartsWith("> ") Then
sort_order = SortOrder.Descending
Else
sort_order = SortOrder.Ascending
End If
Else
' New column. Sort ascending.
sort_order = SortOrder.Ascending
End If
' Remove the old sort indicator.
m_SortingColumn.Text = _
m_SortingColumn.Text.Substring(2)
End If
' Display the new sort order.
m_SortingColumn = new_sorting_column
If sort_order = SortOrder.Ascending Then
m_SortingColumn.Text = "> " & m_SortingColumn.Text
Else
m_SortingColumn.Text = "< " & m_SortingColumn.Text
End If
' Create a comparer.
lvShop.ListViewItemSorter = New ListViewColumnSorter(e.Column, sort_order)
' Sort.
lvShop.Sort()
Catch ex As Exception
strErrMsg = "Oops! Something is wrong with sorting column header."
MessageBox.Show(strErrMsg & vbCrLf & "Err: " & ex.Message)
End Try
End Sub
在項目中創建一個名稱爲ListViewColumnSorter
的新班級 將其複製並粘貼到班級中。
Imports System.Collections
Imports System.Windows.Forms
Public Class ListViewColumnSorter
Implements IComparer
Private m_ColumnNumber As Integer
Private m_SortOrder As SortOrder
Public Sub New(ByVal column_number As Integer, ByVal _
sort_order As SortOrder)
m_ColumnNumber = column_number
m_SortOrder = sort_order
End Sub
' Compare the items in the appropriate column
' for objects x and y.
Public Function Compare(ByVal x As Object, ByVal y As _
Object) As Integer Implements _
System.Collections.IComparer.Compare
Dim item_x As ListViewItem = DirectCast(x, _
ListViewItem)
Dim item_y As ListViewItem = DirectCast(y, _
ListViewItem)
' Get the sub-item values.
Dim string_x As String
If item_x.SubItems.Count <= m_ColumnNumber Then
string_x = ""
Else
string_x = item_x.SubItems(m_ColumnNumber).Text
End If
Dim string_y As String
If item_y.SubItems.Count <= m_ColumnNumber Then
string_y = ""
Else
string_y = item_y.SubItems(m_ColumnNumber).Text
End If
' Compare them.
If m_SortOrder = SortOrder.Ascending Then
If IsNumeric(string_x) And IsNumeric(string_y) _
Then
Return Val(string_x).CompareTo(Val(string_y))
ElseIf IsDate(string_x) And IsDate(string_y) _
Then
Return DateTime.Parse(string_x).CompareTo(DateTime.Parse(string_y))
Else
Return String.Compare(string_x, string_y)
End If
Else
If IsNumeric(string_x) And IsNumeric(string_y) _
Then
Return Val(string_y).CompareTo(Val(string_x))
ElseIf IsDate(string_x) And IsDate(string_y) _
Then
Return DateTime.Parse(string_y).CompareTo(DateTime.Parse(string_x))
Else
Return String.Compare(string_y, string_x)
End If
End If
End Function
End Class
此排序將排序列表視圖中的所有列。由於互聯網連接程序員:)
相關問題
- 1. 使用WCF DataService連接WPF組合框/列表視圖/列表視圖
- 2. 從組合框填充列表視圖
- 3. 列表視圖中的WPF組合框
- 4. 列表視圖值組合框
- 5. 在列表視圖中將組合框綁定到組合框
- 6. 列表視圖列排序
- 7. 默認樣式列表框/列表視圖/組合框SelectedItem
- 8. 使用合併排序對數組列表排序
- 9. 用組合框排序?
- 10. C#列表視圖排序
- 11. 排序的列表視圖
- 12. 排序列表視圖
- 13. WPF列表框結合列表視圖
- 14. 列的可排序組合框
- 15. 按字母順序排列組合框
- 16. 在列表視圖中填充組合框列表
- 17. c#按升序排序組合列表
- 18. 排序組合框項目(GetScheme(「表」)
- 19. 禁用排序列表視圖
- 20. 合併排序:使用混合元素排序列表
- 21. 使用組合框,文本框和列表視圖的搜索功能
- 22. ZK:組合框排序
- 23. 網格視圖組合框列
- 24. 按列排序列表視圖問題
- 25. 按列排序列表視圖
- 26. 多個列表的排序組合
- 27. Python:組合然後排序列表
- 28. 如何添加列表框或列表視圖中的組合框項目
- 29. 如何使用列表視圖項排
- 30. 使用jQuery排序列表框
如果是這樣,那麼它是比設置標頭是可點擊的很複雜嗎?我的意思是我可以在listview函數內編寫代碼,而不是創建一個IComparer類,因爲我主要在互聯網上看到了我的問題的結果。我希望在這個功能中更容易控制。感謝人 – Luiey
實現IComparer接口非常簡單。它只有一個名爲Compare的方法,它返回一個介於-1和1之間的整數。然後,您只需調用已由Microsoft的好人實施的sort方法。絕對容易,然後自己寫這個排序... 當然,設置列表標題可點擊甚至更容易那麼:-) –