首页编程listview排序(listview的排序功能是怎么实现的)

listview排序(listview的排序功能是怎么实现的)

编程之家 2023-11-06 217次浏览

各位朋友,你是否对listview排序和listview的排序功能是怎么实现的的相关问题感到好奇?别担心,我将为你揭示这些问题的答案,帮助你更好地理解和应用这些知识。让我们一起探索吧!

listview排序(listview的排序功能是怎么实现的)

listview怎么样排序

在VB.NET中,您可以通过创建一个类来实现System.Collections.IComparer接口,实现ListView控件的排序功能。具体实现是:创建该类的实例,赋予给ListView1控件对象的ListViewItemSorter属性,然后在ListView的ColumnClick事件句柄(ListView1_ColumnClick)中添加代码实现按点击列排序。

下面提供一段示例代码功能参考,请根据您的系统的实际情况进行相应的修改:

Private Sub ListView1_ColumnClick(ByVal sender As Object, ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles ListView1.ColumnClick

ListView1.Sorting= SortOrder.Ascending

Dim Sorter= New ListViewSorter(e.Column)

ListView1.ListViewItemSorter= Sorter

listview排序(listview的排序功能是怎么实现的)

End Sub

Public Class ListViewSorter

Implements System.Collections.IComparer

Public SortIndex As Integer

Public Sub New(ByVal SortIndex As Integer)

Me.SortIndex= SortIndex

listview排序(listview的排序功能是怎么实现的)

End Sub

//这里只考虑按数值排序

Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare

Dim x1, y1 As ListViewItem

Dim intx, inty As Integer

x1= x

y1= y

intx= ParseListItemString(x1.SubItems(SortIndex).ToString())

inty= ParseListItemString(y1.SubItems(SortIndex).ToString())

If(intx< inty) Then

Return-1

ElseIf(intx= inty) Then

Return 0

End If

Return 1

End Function

Private Function ParseListItemString(ByVal x As String) As Integer

Dim counter, i As Integer

counter= 0

For i= x.Length- 1 To 0 Step-1

If(x.Chars(i)="{") Then

Exit For

End If

counter= counter+ 1

Next i

Return CInt((x.Substring(x.Length- counter, counter- 1)))

End Function

End Class

C#listview根据某列数据排序

using System;

using System.Collections;

using System.Windows.Forms;

namespace Common

{

///<summary>

///对ListView点击列标题自动排序功能

///</summary>

public class ListViewHelper

{

///<summary>

///构造函数

///</summary>

public ListViewHelper()

{

//

// TODO:在此处添加构造函数逻辑

//

}

public static void ListView_ColumnClick(object sender, System.Windows.Forms.ColumnClickEventArgs e)

{

System.Windows.Forms.ListView lv= sender as System.Windows.Forms.ListView;

//检查点击的列是不是现在的排序列.

if(e.Column==(lv.ListViewItemSorter as ListViewColumnSorter).SortColumn)

{

//重新设置此列的排序方法.

if((lv.ListViewItemSorter as ListViewColumnSorter).Order== System.Windows.Forms.SortOrder.Ascending)

{

(lv.ListViewItemSorter as ListViewColumnSorter).Order= System.Windows.Forms.SortOrder.Descending;

}

else

{

(lv.ListViewItemSorter as ListViewColumnSorter).Order= System.Windows.Forms.SortOrder.Ascending;

}

}

else

{

//设置排序列,默认为正向排序

(lv.ListViewItemSorter as ListViewColumnSorter).SortColumn= e.Column;

(lv.ListViewItemSorter as ListViewColumnSorter).Order= System.Windows.Forms.SortOrder.Ascending;

}

//用新的排序方法对ListView排序

((System.Windows.Forms.ListView)sender).Sort();

}

}

///<summary>

///继承自IComparer

///</summary>

public class ListViewColumnSorter: System.Collections.IComparer

{

///<summary>

///指定按照哪个列排序

///</summary>

private int ColumnToSort;

///<summary>

///指定排序的方式

///</summary>

private System.Windows.Forms.SortOrder OrderOfSort;

///<summary>

///声明CaseInsensitiveComparer类对象

///</summary>

private System.Collections.CaseInsensitiveComparer ObjectCompare;

///<summary>

///构造函数

///</summary>

public ListViewColumnSorter()

{

//默认按第一列排序

ColumnToSort= 0;

//排序方式为不排序

OrderOfSort= System.Windows.Forms.SortOrder.None;

//初始化CaseInsensitiveComparer类对象

ObjectCompare= new System.Collections.CaseInsensitiveComparer();

}

///<summary>

///重写IComparer接口.

///</summary>

///<param name="x">要比较的第一个对象</param>

///<param name="y">要比较的第二个对象</param>

///<returns>比较的结果.如果相等返回0,如果x大于y返回1,如果x小于y返回-1</returns>

public int Compare(object x, object y)

{

int compareResult;

System.Windows.Forms.ListViewItem listviewX, listviewY;

//将比较对象转换为ListViewItem对象

listviewX=(System.Windows.Forms.ListViewItem)x;

listviewY=(System.Windows.Forms.ListViewItem)y;

string xText= listviewX.SubItems[ColumnToSort].Text;

string yText= listviewY.SubItems[ColumnToSort].Text;

int xInt, yInt;

//比较,如果值为IP地址,则根据IP地址的规则排序。

if(IsIP(xText)&& IsIP(yText))

{

compareResult= CompareIp(xText, yText);

}

else if(int.TryParse(xText, out xInt)&& int.TryParse(yText, out yInt))//是否全为数字

{

//比较数字

compareResult= CompareInt(xInt, yInt);

}

else

{

//比较对象

compareResult= ObjectCompare.Compare(xText, yText);

}

//根据上面的比较结果返回正确的比较结果

if(OrderOfSort== System.Windows.Forms.SortOrder.Ascending)

{

//因为是正序排序,所以直接返回结果

return compareResult;

}

else if(OrderOfSort== System.Windows.Forms.SortOrder.Descending)

{

//如果是反序排序,所以要取负值再返回

return(-compareResult);

}

else

{

//如果相等返回0

return 0;

}

}

///<summary>

///判断是否为正确的IP地址,IP范围(0.0.0.0~255.255.255)

///</summary>

///<param name="ip">需验证的IP地址</param>

///<returns></returns>

public bool IsIP(String ip)

{

return System.Text.RegularExpressions.Regex.Match(ip,@"^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$").Success;

}

///<summary>

///比较两个数字的大小

///</summary>

///<param name="ipx">要比较的第一个对象</param>

///<param name="ipy">要比较的第二个对象</param>

///<returns>比较的结果.如果相等返回0,如果x大于y返回1,如果x小于y返回-1</returns>

private int CompareInt(int x, int y)

{

if(x> y)

{

return 1;

}

else if(x< y)

{

return-1;

}

else

{

return 0;

}

}

///<summary>

///比较两个IP地址的大小

///</summary>

///<param name="ipx">要比较的第一个对象</param>

///<param name="ipy">要比较的第二个对象</param>

///<returns>比较的结果.如果相等返回0,如果x大于y返回1,如果x小于y返回-1</returns>

private int CompareIp(string ipx, string ipy)

{

string[] ipxs= ipx.Split('.');

string[] ipys= ipy.Split('.');

for(int i= 0; i< 4; i++)

{

if(Convert.ToInt32(ipxs[i])> Convert.ToInt32(ipys[i]))

{

return 1;

}

else if(Convert.ToInt32(ipxs[i])< Convert.ToInt32(ipys[i]))

{

return-1;

}

else

{

continue;

}

}

return 0;

}

///<summary>

///获取或设置按照哪一列排序.

///</summary>

public int SortColumn

{

set

{

ColumnToSort= value;

}

get

{

return ColumnToSort;

}

}

///<summary>

///获取或设置排序方式.

///</summary>

public System.Windows.Forms.SortOrder Order

{

set

{

OrderOfSort= value;

}

get

{

return OrderOfSort;

}

}

}

}

listview的排序功能是怎么实现的

在VB.NET中,您可以通过创建一个类来实现System.Collections.IComparer接口,实现ListView控件的排序功能。具体实现是:创建该类的实例,赋予给ListView1控件对象的ListViewItemSorter属性,然后在ListView的ColumnClick事件句柄(ListView1_ColumnClick)中添加代码实现按点击列排序。

下面提供一段示例代码功能参考,请根据您的系统的实际情况进行相应的修改:

Private Sub ListView1_ColumnClick(ByVal sender As Object, ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles ListView1.ColumnClick

ListView1.Sorting= SortOrder.Ascending

Dim Sorter= New ListViewSorter(e.Column)

ListView1.ListViewItemSorter= Sorter

End Sub

Public Class ListViewSorter

Implements System.Collections.IComparer

Public SortIndex As Integer

Public Sub New(ByVal SortIndex As Integer)

Me.SortIndex= SortIndex

End Sub

//这里只考虑按数值排序

Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare

Dim x1, y1 As ListViewItem

Dim intx, inty As Integer

x1= x

y1= y

intx= ParseListItemString(x1.SubItems(SortIndex).ToString())

inty= ParseListItemString(y1.SubItems(SortIndex).ToString())

If(intx< inty) Then

Return-1

ElseIf(intx= inty) Then

Return 0

End If

Return 1

End Function

Private Function ParseListItemString(ByVal x As String) As Integer

Dim counter, i As Integer

counter= 0

For i= x.Length- 1 To 0 Step-1

If(x.Chars(i)="{") Then

Exit For

End If

counter= counter+ 1

Next i

Return CInt((x.Substring(x.Length- counter, counter- 1)))

End Function

End Class

文章分享到这里,希望我们关于listview排序和listview的排序功能是怎么实现的的内容能够给您带来一些新的认识和思考。如果您还有其他问题,欢迎继续探索我们的网站或者与我们交流,我们将尽力为您提供满意的答案。

企业网站建设,企业网站建设的作用 郑州网络推广(郑州网络推广公司有哪些)