分爲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
?
謝謝你的時間!
分爲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
?
謝謝你的時間!
可以使用OrderByDescending()
解析字符串的一部分int
和排序:
var sorted = unsorted.OrderByDescending(i => Convert.Int32(i.Split('/')[0])).ToArray();
你有幾個選項來完成你的任務:
你需要實現自己的排序通過實現IComparer接口來實現。
您的比較器應該提取斜槓前的數字/使用字符串函數indexOf,SubString或一個實際表達式。
MSDN這裏給出了一個很好的例子: https://msdn.microsoft.com/en-us/library/234b841s%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396
你可以做上述提取的數量和運行LINQ查詢相同的操作。如果列結果被加載到一個列表,你可以這樣做:
myList = customerList.OrderBy(x => int.Parse(x.Code)).ToList();
很少有「容易」的選項。一是墊空間的值時,它們加入以後:
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;
哪你期望的結果? –
您對排序標準並不清楚。什麼是大小? –
@Roma我很抱歉我編輯了這個問題! – Bongskie