c#中listview控件實現排序功能

 C#中的ListView控件不能實現單擊列表頭時按升序或反序對它中Items排序。以下代碼將解決這個問題。

  首先添加ListView的ColumnClick事件

private void list_6243_ColumnClick(object sender, ColumnClickEventArgs e)
        
{
            
this.list_6243 .ListViewItemSorter = new ListViewItemComparer(e.Column );
        }
然後添加新類
 class ListViewItemComparer : System.Collections.IComparer
    
{
        
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();
this.list_6243.ListViewItemSorter = new ListViewItemComparer(int);

不過,有一點需要注意了:如果你的ListView 發生了變化,如:刪除了Iitm、增加了新的Item、或修改等等,此時如果還用上面兩句就會出錯,應該是在litm變化之後先將ListViewItemSorter置爲null

rivate void int_6243()                                                     
        
{
        
//    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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章