第一种办法:
将ListView的数据放入DataView中,设置DataView的Sort属性,然后将DataView中的内容在ListView中展示出来。
(1)初始化ListView,将ListView的数据存入DataTable中
(2)从DataTable中获得DataView
(3)设置DataView的Sort属性,根据条件进行设定
(4)将DataView中的数据在ListView中展示出来
aaa.txt:
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 }