使用vb.net 对 Windows Form 按列排序 ListView 项目

本文介绍了如何在VB.NET的ListView控件中实现自定义排序,特别是按列对包含子项目的项目进行排序。通过创建实现IComparer接口的ListViewItemComparer类,可以实现升序或降序排序。文章详细阐述了事件处理、自定义比较器类的实现,以及如何处理日期等特殊数据类型的排序问题。
摘要由CSDN通过智能技术生成

使用 Windows Form 按列排序 ListView 项目

摘要: 说明如何根据所单击的列在 Microsoft .NET 中的 ListView 控件提供项目排序。

简介

ListView 控件是显示文件系统信息和显示 XML 或数据库数据的非常好的方式。ListView 控件通常用于显示表示项目以及项目文本的图形图标。此外,ListView 控件还可以用于显示有关子项目中项目的其他信息。例如,如果 ListView 控件显示一列文件,您可以配置 ListView 控件来显示作为子项目的诸如文件大小和属性的详细信息。要显示 ListView 控件中的子项目信息,必须将 View 属性设置为 View.Details。此外,您必须创建 ColumnHeader 对象并将这些对象分配给 ListView 控件的 Columns 属性。在设置这些属性后,项目以行和列格式进行显示,类似于 DataGrid 控件。以这种方式显示项目的能力使 ListView 控件为从任意类型的数据源显示数据提供了快速、简便的解决方案。

ListView 控件进行排序是通过使用 ListViewSorting 属性而提供的。这使您可以定义要应用到项目的排序类型。如果您只想按项目排序,这是一个非常好的功能。如果您要按子项目排序,必须使用 ListView 控件的自定义排序功能。本文将说明如何在 ListView 控件中执行自定义排序,以及在排序时如何处理特殊的数据类型条件。

 

ListView 控件的自定义排序功能

ListView 控件提供了您可以使用排序的功能,而不是由 Sorting 属性提供。当 ListView 控件使用 Sorting 属性排序项目时,它使用一个实现 System.Collections.IComparer 接口的类。这个类提供用于排序每个项目的排序功能。为了按子项目进行排序,您必须创建自己的类,来实现反过来可以实现 ListView 控件所需排序的 IComparer 接口。该类利用构造函数进行定义,该构造函数可以指定 ListView 控件排序所用的列。在您创建这个类后(通常将其作为窗体的嵌套类),您可以创建该类的一个实例,并将其分配到 ListViewListViewItemSorter 属性。当调用 Sort 方法时,这会确定 ListView 控件将要使用的自定义排序类。Sort 方法执行 ListView 项目的实际排序。

升序排序

以下部分提供的基本示例说明了在 ListView 控件中基于其子项目的排序。该示例说明了以升序排序 ListView 控件中的项目。升序排序或降序排序将会在本文的稍后部分进行说明。此处的目标就是说明在 ListView 控件中进行自定义排序的基本要求。

初始化控件

如果要开始,请创建 ListView 控件的实例,并将其添加到窗体中。在控件位于窗体上后,使用 Items 属性将项目添加到 ListView 控件。您可以添加任意多的项目,只要确保每个项目的文本都是唯一的。在您创建项目时,为每个项目添加两个子项目。第一个子项目应该包含数字信息,第二个子项目包含日期信息。下面的表格示例说明该信息在 ListView 控件中可能如何显示。

项目

子项目 1

子项目 2

Alpha

1.0

4/5/1945

Charlie

3.5

1/9/1920

Bravo

2.4

12/8/1930

创建两个 ColumnHeader 对象,并将它们分配到 ListView 控件的 Columns 属性中。将 View 属性设置为 View.Details

处理 ColumnClick 事件

为了确定按哪个子项目集进行排序,您需要了解用户何时单击某个子项目的列标题。为此,您需要为 ListViewColumnClick 事件创建一个事件处理方法。将事件处理方法作为窗体中的一个成员,并确保它包含的签名相似于下面代码示例所显示的签名。

'Visual Basic

Private Sub listView1_ColumnClick(sender As Object, e As System.Windows.Forms.ColumnClickEventArgs)

End Sub

//C#

private void listView1_ColumnClick(object sender, System.Windows.Forms.ColumnClickEventArgs e)

{

}

通过向窗体的构造函数中添加代码,将事件处理方法连接到 ListView 控件,如下面的示例所示。

'Visual Basic

AddHandler listView1.ColumnClick, AddressOf Me.listView1_ColumnClick

//C#

this.listView1.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listView1_ColumnClick);

将下面的代码添加到用于 ColumnClick 事件的事件处理方法。

'Visual Basic

' Set the ListViewItemSorter property to a new ListViewItemComparer

' object.

Me.listView1.ListViewItemSorter = New ListViewItemComparer(e.Column)

' Call the sort method to manually sort.

listView1.Sort()

//C#

// Set the ListViewItemSorter property to a new ListViewItemComparer

// object.

this.listView1.ListViewItemSorter = new ListViewItemComparer(e.Column);

// Call the sort method to manually sort.

listView1.Sort();

添加到事件处理方法的代码会利用 ListViewItemComparer 类(在下一部分中定义)的新实例来设置 ListView 控件的 ListViewItemSorter 属性,然后分配要单击的列。被单击的列作为事件参数的组成部分进行传递。在设置 ListViewItemSorter 属性后,调用 Sort 方法来执行手动排序。

创建 ListViewItemComparer 类

正如前面提到的那样,在 ListView 控件中进行自定义排序的关键在于创建实现 System.Collections.IComparer 接口的类。就是这个类为项目提供排序。对于这个示例,定义了名为 ListViewItemComparer

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值