2010-11-03 20 views
1

我有一個列表視圖,我試圖根據列進行排序。我有columnclick事件等工作,並進行排序,但我有以下問題:添加ints到列表視圖進行排序

我似乎無法將項目添加到列表視圖爲整數。這是一個問題,因爲如果我有一列整數,我不得不使用ToString()上,排序將10提前10。

有誰知道我可以添加項目作爲int的,以便該排序具有所需的功能。另外,並不是所有的列都是int,所以有一些字符串列,我希望排序也適用於這些列。

僅供參考,我用於排序的代碼下面的教程:http://support.microsoft.com/kb/319401

乾杯

+0

改爲使用DataGridView。它不要求綁定的數據是'ToString()''d。 – leppie 2010-11-03 11:46:48

回答

1

如果所選列有數字可以檢測。在比較功能

  int intX = 0, intY = 0; 
      if(int.TryParse(listviewX.SubItems[ColumnToSort].Text, out intX) 
       && int.TryParse(listviewY.SubItems[ColumnToSort].Text, out intY)) 
      { 
       return intX.CompareTo(inty); 
      } 

寫這也許是問題,如果一些列包含數字和文本。

+0

謝謝,將這個(Int32.TryParse)與本教程中的代碼結合起來,它完美地工作。 – AndrewC 2010-11-03 12:23:18

3

您可以創建一個實現IComparer的分揀器類,並將其分配給ListView的ListViewItemSorter財產。

IComparer有一個方法比較。兩個ListViewItem實例被傳遞給該方法。您需要讀取列值,然後將其解析爲int並返回正確的比較結果(基於int而不是基於字符串)。

您可以創建一個用於創建列的字符串值,但還保持着原來的int值,以避免在比較器的int.Parse調用自己的ListViewItem類。

未經測試的例子:

public class MyItemComparer : IComparer 
{ 
    public int Compare(object x, object y) 
    { 
     ListViewItem xItem = (ListViewItem)x; 
     ListViewItem yItem = (ListViewItem)y; 

     int a = int.Parse(xItem.SubItems[0]); 
     int b = int.Parse(yItem.SubItems[0]); 
     return a.CompareTo(b); 
    } 
}