第一种办法:

将ListView的数据放入DataView中,设置DataView的Sort属性,然后将DataView中的内容在ListView中展示出来。

(1)初始化ListView,将ListView的数据存入DataTable中

(2)从DataTable中获得DataView

(3)设置DataView的Sort属性,根据条件进行设定

(4)将DataView中的数据在ListView中展示出来

aaa.txt:winform ListView点击行表头,排序

 

 

 1 using System;
 2 using System.Data;
 3 using System.IO;
 4 using System.Text;
 5 using System.Windows.Forms;
 6 
 7 namespace batch
 8 {
 9     public partial class Form3 : Form
10     {
11         public Form3()
12         {
13             InitializeComponent();
14         }
15         DataTable dt = null;
16         private void Form3_Load(object sender, EventArgs e)
17         {
18             //添加DataTable的列表头
19             dt = new DataTable();
20             dt.Columns.Add("num");
21             dt.Columns.Add("name");
22             dt.Columns.Add("age");
23             string path = @"C:\Users\Administrator\Desktop\aaa.txt";
24             //读取文本文件内容
25             string[] ss = File.ReadAllLines(path, Encoding.Default);
26             foreach (string s in ss)
27             {
28                 string[] a = s.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
29                 //往listView1中添加数据
30                 ListViewItem li = new ListViewItem();
31                 li.Text = a[0];
32                 li.SubItems.AddRange(new string[] { a[1], a[2] });
33                 listView1.Items.Add(li);
34                 //往DataTable中添加行数据
35                 dt.Rows.Add(a[0], a[1], a[2]);
36             }
37         }
38         int sortfield = -1;
39         /// <summary>
40         /// listView1的列头点击事件
41         /// </summary>
42         /// <param name="sender"></param>
43         /// <param name="e"></param>
44         private void listView1_ColumnClick(object sender, ColumnClickEventArgs e)
45         {
46             if (dt == null) return;
47             //获得有内容的DataView
48             DataView dv = new DataView(dt);
49             //获得所点列的索引
50             int sf = e.Column;
51             if (sortfield == sf)
52             {
53                 //设置sort
54                 dv.Sort = dt.Columns[sf].ColumnName + " desc";
55                 sortfield = -1;
56             }
57             else
58             {
59                 dv.Sort = dt.Columns[sf].ColumnName + " asc";
60                 sortfield = sf;
61             }
62             //展示DataView中的内容
63             listView1.Items.Clear();
64             foreach (DataRowView drv in dv)
65             {
66                 ListViewItem li = new ListViewItem();
67                 li.Text = drv[0].ToString();
68                 li.SubItems.Add(drv[1].ToString());
69                 li.SubItems.Add(drv[2].ToString());
70                 listView1.Items.Add(li);
71             }
72 
73         }
74     }
75 }
View Code

相关文章: