2017-03-02 42 views
0

分爲C#的DataGridView排序數字字符串是有排序數字串的方式,看起來像這樣:這是由斜線

因此,這將是如下:

50/51 
44/148 
42/51 
6/12 
6/12 
5/8 
5/13 
5/13 
5/12 
4/4 
4/26 

(按/之前的數字排序)

現在它正按第一個數字排序。

我沒有任何DataSource,我添加了與Columns.Add列。 或者也許有辦法將它轉換爲int

謝謝你的時間!

+0

哪你期望的結果? –

+0

您對排序標準並不清楚。什麼是大小? –

+0

@Roma我很抱歉我編輯了這個問題! – Bongskie

回答

1

可以使用OrderByDescending()解析字符串的一部分int和排序:

var sorted = unsorted.OrderByDescending(i => Convert.Int32(i.Split('/')[0])).ToArray(); 
1

你有幾個選項來完成你的任務:

  1. 你需要實現自己的排序通過實現IComparer接口來實現。

    您的比較器應該提取斜槓前的數字/使用字符串函數indexOf,SubString或一個實際表達式。

    MSDN這裏給出了一個很好的例子: https://msdn.microsoft.com/en-us/library/234b841s%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

  2. 你可以做上述提取的數量和運行LINQ查詢相同的操作。如果列結果被加載到一個列表,你可以這樣做:

    myList = customerList.OrderBy(x => int.Parse(x.Code)).ToList();

0

很少有「容易」的選項。一是墊空間的值時,它們加入以後:

for (int i = 0; i < dataGridView1.RowCount; i++) 
{ 
    var cell = dataGridView1[0, i]; 
    var strValue = cell.Value?.ToString(); 
    cell.Value = strValue?.PadLeft(strValue.Length + strValue.IndexOf("/")); 
} 

,或者如果第二個數字應該通過數值也墊非打印字符以左手進行排序:

for (int i = 0; i < dataGridView1.RowCount; i++) 
{ 
    var cell = dataGridView1[0, i]; 
    if (cell.Value != null) 
     cell.Value = string.Join("/", cell.Value.ToString().Split('.').Select(s => s.PadLeft(5, '\t'))); 
} 

dataGridView1.Sort(dataGridView1.Columns[0], ListSortDirection.Ascending); 

另一種選擇可能是將值轉換爲數字(50.51)和更改小數點分隔符:

var ci = new System.Globalization.CultureInfo("en-US", false); 
ci.NumberFormat.NumberDecimalSeparator = "/"; 
dataGridView1.Columns[0].DefaultCellStyle.FormatProvider = ci;