本分步指南介绍了如何通过在 Visual Basic.net 或 Visual Basic 2005 应用程序中的列来排序
ListView 控件。
当您正在使用
ListView 控件时,要对基于特定列及其内容进行排序。此类功能的示例发生在 Windows 资源管理器中查看您的硬盘上的文件夹的内容时进行编程。在详细信息视图、 Windows 资源管理器将显示有关文件的信息,该文件夹中。例如对于您看到该文件的名称、 文件大小、 文件类型和的文件的修改日期。当您单击一个列标题的时列表被按升序顺序对该列。再次单击相同的列标题列是按降序进行排序。
本文中的示例定义了实现
IComparer 接口的类。此外,此示例使用
CaseInsenstiveComparer 类的
比较 方法来执行实际的比较的项目。请注意此方法的比较不区分大小写 ("apple"被认为是"苹果"相同)。同时,请注意在此示例中列的所有排序"文本"的方式。如果要以不同的方式进行排序 (例如按数字顺序),可以使用您希望使用任何一种方法来排序的替换下面的代码行:
compareResult = ObjectCompare.Compare(listviewX.SubItems(ColumnToSort).Text, listviewY.SubItems(ColumnToSort).Text)
如何生成示例项目
- 创建一个新的 Visual Basic.net 或 Visual Basic 2005 Windows 应用程序项目。 默认情况下创建 Form1。
注意您必须更改该代码在 Visual Basic 2005 中。默认状态下,Visual Basic 创建项目的两个文件,当您创建一个 Windows 窗体项目时。如果窗体名为 Form1,Form1.vb 和 Form1.Designer.vb,被命名为表示窗体的两个文件。在 Form1.vb 文件中编写代码。Windows 窗体设计器在 Form1.Designer.vb 文件中写入代码。Windows 窗体设计器使用 partial 关键字将 Form1 的实现划分为两个单独的文件。此行为可防止该设计器生成的代码正在与您的代码交错。
有关新的 Visual Basic 2005 语言增强功能的详细信息,请访问下面的 Microsoft 开发人员网络 (MSDN) 的网站: 有关分部类和 Windows 窗体设计器的详细信息请访问下面的 MSDN 网站: - 向 Form1 中添加 ListView 控件。调整大小,该窗体为有几个英寸宽的几个英寸高。
- 将以下代码粘贴到窗体的类:
Private lvwColumnSorter As ListViewColumnSorter
- 将下面的代码粘贴到窗体的构造函数,InitializeComponent 方法调用后:
' Create an instance of a ListView column sorter and assign it
' to the ListView control.
lvwColumnSorter = New ListViewColumnSorter()
Me.ListView1.ListViewItemSorter = lvwColumnSorter
- 将以下代码粘贴到窗体的 Load 事件:
Dim columnheader As ColumnHeader ' Used for creating column headers.
Dim listviewitem As ListViewItem ' Used for creating ListView items.
' Make sure that the view is set to show details.
ListView1.View = View.Details
' Create some ListView items consisting of first and last names.
listviewitem = New ListViewItem("Mike")
listviewitem.SubItems.Add("Nash")
Me.ListView1.Items.Add(listviewitem)
listviewitem = New ListViewItem("Kim")
listviewitem.SubItems.Add("Abercrombie")
Me.ListView1.Items.Add(listviewitem)
listviewitem = New ListViewItem("Sunil")
listviewitem.SubItems.Add("Koduri")
Me.ListView1.Items.Add(listviewitem)
listviewitem = New ListViewItem("Birgit")
listviewitem.SubItems.Add("Seidl")
Me.ListView1.Items.Add(listviewitem)
' Create some column headers for the data.
columnheader = New ColumnHeader()
columnheader.Text = "First Name"
Me.ListView1.Columns.Add(columnheader)
columnheader = New ColumnHeader()
columnheader.Text = "Last Name"
Me.ListView1.Columns.Add(columnheader)
' Loop through and size each column header to fit the column header text.
For Each columnheader In Me.ListView1.Columns
columnheader.Width = -2
Next
- 将下面的代码粘贴到 ColumnClick 事件中,为 ListView:
' Determine if the clicked column is already the column that is
' being sorted.
If (e.Column = lvwColumnSorter.SortColumn) Then
' Reverse the current sort direction for this column.
If (lvwColumnSorter.Order = SortOrder.Ascending) Then
lvwColumnSorter.Order = SortOrder.Descending
Else
lvwColumnSorter.Order = SortOrder.Ascending
End If
Else
' Set the column number that is to be sorted; default to ascending.
lvwColumnSorter.SortColumn = e.Column
lvwColumnSorter.Order = SortOrder.Ascending
End If
' Perform the sort with these new sort options.
Me.ListView1.Sort()
- 在 项目 菜单上单击添加到项目的新类 添加类。
- 所有新类中的默认代码替换下面的代码:
Imports System.Collections
Imports System.Windows.Forms
Public Class ListViewColumnSorter
Implements System.Collections.IComparer
Private ColumnToSort As Integer
Private OrderOfSort As SortOrder
Private ObjectCompare As CaseInsensitiveComparer
Public Sub New()
' Initialize the column to '0'.
ColumnToSort = 0
' Initialize the sort order to 'none'.
OrderOfSort = SortOrder.None
' Initialize the CaseInsensitiveComparer object.
ObjectCompare = New CaseInsensitiveComparer()
End Sub
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
Dim compareResult As Integer
Dim listviewX As ListViewItem
Dim listviewY As ListViewItem
' Cast the objects to be compared to ListViewItem objects.
listviewX = CType(x, ListViewItem)
listviewY = CType(y, ListViewItem)
' Compare the two items.
compareResult = ObjectCompare.Compare(listviewX.SubItems(ColumnToSort).Text, listviewY.SubItems(ColumnToSort).Text)
' Calculate the correct return value based on the object
' comparison.
If (OrderOfSort = SortOrder.Ascending) Then
' Ascending sort is selected, return typical result of
' compare operation.
Return compareResult
ElseIf (OrderOfSort = SortOrder.Descending) Then
' Descending sort is selected, return negative result of
' compare operation.
Return (-compareResult)
Else
' Return '0' to indicate that they are equal.
Return 0
End If
End Function
Public Property SortColumn() As Integer
Set(ByVal Value As Integer)
ColumnToSort = Value
End Set
Get
Return ColumnToSort
End Get
End Property
Public Property Order() As SortOrder
Set(ByVal Value As SortOrder)
OrderOfSort = Value
End Set
Get
Return OrderOfSort
End Get
End Property
End Class
- 保存、 生成,并运行示例项目。
- 单击不同的列标题,ListView 控件中。单击标题,ListView 控件的内容将根据您单击列的升序顺序排序。再次单击相同的列标题时,该列是按降序进行排序。
文章编号: 319399 - 最后修改: 2007年5月11日 - 修订: 3.5
这篇文章中的信息适用于:
- Microsoft Visual Basic 2005
- Microsoft Visual Basic .NET 2003 标准版
- Microsoft Visual .NET 2002 标准版
| kbmt kbvs2005swept kbvs2005applies kbhowtomaster KB319399 KbMtzh |
机器翻译注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版:
319399
(http://support.microsoft.com/kb/319399/en-us/
)
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。