2016-08-12 50 views
-1

我在排序時遇到了一些問題。我有以下的代碼從MSD文件它適用於所有領域,而不是與字符開始喜歡 $例如

 amount 
     $1900 
     $4444 
     $39 
     $0 

量字段,以什麼樣的變化,我應該賺那麼這個代碼不排序的列它還會在開始時對具有$符號的金額進行排序。

這是代碼:

class ListViewItemComparer : IComparer { 
private int col; 
private SortOrder order; 
public ListViewItemComparer() { 
    col=0; 
    order = SortOrder.Ascending; 
} 
public ListViewItemComparer(int column, SortOrder order) 
{ 
    col=column; 
    this.order = order; 
} 
public int Compare(object x, object y) 
{ 
    int returnVal= -1; 
    returnVal = String.Compare(((ListViewItem)x).SubItems[col].Text, 
          ((ListViewItem)y).SubItems[col].Text); 
    // Determine whether the sort order is descending. 
    if(order == SortOrder.Descending) 
     // Invert the value returned by String.Compare. 
     returnVal *= -1 
    return returnVal; 
} 
} 

和我打電話列表視圖欄點擊事件代碼

private void lvwUsers_ColumnClick(Object eventSender, ColumnClickEventArgs eventArgs) 
    { 


     if (lvwUsers.Sorting == SortOrder.Ascending) 
      lvwUsers.Sorting = SortOrder.Descending; 
     else 
      lvwUsers.Sorting = SortOrder.Ascending; 

     lvwUsers.Sort(); 

     this.lvwUsers.ListViewItemSorter = new ListViewItemComparer(eventArgs.Column, 
                  lvwUsers.Sorting); 

     } 

它工作正常,但不與他們

有$符號量

那麼如何使用$符號對listview的數量列進行排序呢?

+0

你能回答 –

+0

首先,你應該從你的列表中排序之後刪除$,然後將其添加到結果 –

+1

那與ListView的問題:一切都是字符串。問題是「$ 9」的排序會高於「$ 100」,因爲字符「9」大於「1」。 DataGridView將是一個更好的選擇 – Plutonix

回答

1

你已經有一個比較器。爲什麼不修改它以按照你想要的方式進行排序?使用Decimal.Parse將字符串轉換爲十進制值,然後對其進行比較。無需修改您的列表數據。它也適應不同的文化。

如果數據可以包含除貨幣值之外的其他東西,那麼您可能希望使此代碼更具彈性,以處理您獲得的任何類型的值。

class ListViewItemComparer : IComparer 
    { 
     private int col; 
     private SortOrder order; 
     public ListViewItemComparer() 
     { 
      col = 0; 
      order = SortOrder.Ascending; 
     } 
     public ListViewItemComparer(int column, SortOrder order) 
     { 
      col = column; 
      this.order = order; 
     } 
     public int Compare(object x, object y) 
     { 
      int returnVal = -1; 
      decimal value1; 
      Decimal.TryParse(((ListViewItem)x).SubItems[col].Text, 
          System.Globalization.NumberStyles.Currency, 
          System.Globalization.CultureInfo.CurrentUICulture, 
          out value1); 
      decimal value2; 
      Decimal.TryParse(((ListViewItem)y).SubItems[col].Text, 
          System.Globalization.NumberStyles.Currency, 
          System.Globalization.CultureInfo.CurrentUICulture, 
          out value2); 
      returnVal = Decimal.Compare(value1, value2); 
      // Determine whether the sort order is descending. 
      if (order == SortOrder.Descending) 
       // Invert the value returned by String.Compare. 
       returnVal *= -1; 
      return returnVal; 
     } 
    } 
2

思考的食物 這種方法是硬編碼的美元符號,但可能有一個正則表達式,檢測非數字字符,存儲它們,然後您將它們注入到字符串結束。

private List<string> sortthelist(List<string> incomingList) 
    { 
     List<int> convertedlist = new List<int>(); 
     for (int i = 0; i < incomingList.Count; i++) 
     { 
      convertedlist.Add(int.Parse(incomingList[i].Replace("$", "")));//convert your strings into integers 
     } 

     convertedlist.Sort();//sort your integers 
     incomingList.Clear();//clear the existing list 
     foreach (int item in convertedlist)//fill it back up 
     { 
      incomingList.Add("$" + item.ToString());//add the dollar sign back into the string 
     } 

     return incomingList;//return the sorted list 
    } 
+0

你可以在列中實現它點擊我點擊第4列 –

相關問題