C#中的ListView控件不能實現單擊列表頭時按升序或反序對它中Items排序。以下代碼將解決這個問題。
首先添加ListView的ColumnClick事件
{
this.list_6243 .ListViewItemSorter = new ListViewItemComparer(e.Column );
}
{
private int col;
public ListViewItemComparer()
{
col = 0;
}
public ListViewItemComparer(int column)
{
col = column;
}
public int Compare(object x, object y)
{
return String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text);
}
}
this.list_6243.ListViewItemSorter = new ListViewItemComparer(int);
不過,有一點需要注意了:如果你的ListView 發生了變化,如:刪除了Iitm、增加了新的Item、或修改等等,此時如果還用上面兩句就會出錯,應該是在litm變化之後先將ListViewItemSorter置爲null
{
// timer1.Enabled = false;
// timer2.Enabled = false;
try
{
this.list_6243.Items.Clear();
this.list_6243.ListViewItemSorter = null;//非常重要!
XmlDocument MyXMLDoc = new XmlDocument();
MyXMLDoc.Load(Application .StartupPath + "/XML_6243.xml");
XmlNodeList MyNodes = MyXMLDoc.GetElementsByTagName("keyname");
foreach (XmlNode MyNode in MyNodes)
{
string[] subItem ={ MyNode.InnerText, "", "", "" };
this.list_6243.Items.Add(new ListViewItem(subItem));
}
// this.list_6243.Sorting = SortOrder.Ascending;
MyNodes = MyXMLDoc.GetElementsByTagName("musicsource");
int i = 0;
foreach (XmlNode MyNode in MyNodes)
{
this.list_6243.Items[i++].SubItems[1].Text = MyNode.InnerText;
}
MyNodes = MyXMLDoc.GetElementsByTagName("musicaddr");
i = 0;
foreach (XmlNode MyNode in MyNodes)
{
this.list_6243.Items[i++].SubItems[3].Text = MyNode.InnerText;
}
MyNodes = MyXMLDoc.GetElementsByTagName("playway");
i = 0;
foreach (XmlNode MyNode in MyNodes)
{
this.list_6243.Items[i++].SubItems[2].Text = MyNode.InnerText;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
this.list_6243.ListViewItemSorter = new ListViewItemComparer();
}
哈哈,你也許發現了,此代碼只能實現升序,那降序呢?請參考網頁:http://support.microsoft.com/kb/319401