2016-07-31 83 views
0

我有一個Datagridview(dataGridView1)和數據源是一個列表(Bets)。我想按列值升序(odd1)來訂購它。我怎麼能做到這一點?排序Datagridview與數據源的列表

編輯:也許我應該在填充datagridview之前排序列表?任何建議?

編輯2:我得到了解決方案,但數字是在一個錯誤的進展。檢查圖:

enter image description here

1.99後,我想有2.00 instea 10.57。我該怎麼做?

EDIT3:這是我的一塊類:

公共字符串odd1 { 得到{(Odds.Count> = 3)?賠率[0]:「錯誤」; } set {if(Odds.Count> = 3)Odds [0] = value; } }

public string oddX 
{ 
    get { return (Odds.Count >= 3) ? Odds[1] : "error"; } 
    set { if (Odds.Count >= 3) Odds[1] = value; } 
} 

public string odd2 
{ 
    get { return (Odds.Count >= 3) ? Odds[2] : "error"; } 
    set { if (Odds.Count >= 3) Odds[2] = value; } 
} 
+0

我通常釘這對我所有的數據網格視圖的一個額外的行並給你一些非常好的基本功能http://www.codeproject.com/Articles/33786/DataGridView-Filter-Popup –

+0

我明白了,我會檢查它,謝謝。無論如何,我希望有人可以在這裏建議我一個解決方案:)再次感謝 – Marci

+0

另外,如果你只是想在它進入網格之前訂購它,只需按該字段排序,然後再將其指定爲數據源 –

回答

2

您可以設置GridView的數據源之前,簡單地使用Linq:

編輯:由於odd1的類型爲字符串,則需要將其轉換爲一個數字,以得到想要的結果。由於並非所有數字都是有效的,所以您需要進行一些檢查以獲得期望的結果。

list = list.OrderBy(x=> ConvertFromString(x.odd1)).ToList(); 

定義一個方法:

private decimal ConvertFromString(string str) 
{ 
    decimal val = decimal.MaxValue; 

    if (decimal.TryParse(str, out val)) 
     return val; 
    else 
     return decimal.MaxValue; 
} 

或就地而無需創建一個新的列表排序:

list.Sort((x, y) => (int)(Decimal.Parse(x.odd1) - Decimal.Parse(y.odd1))); 
+0

它的工作,謝謝,但有一個小問題。檢查我的問題編輯2,請 – Marci

+0

@Marci這是因爲odd1的類型是字符串,而不是十進制。檢查編輯的答案。 – user3185569

+0

我得到這個錯誤:輸入字符串格式不正確 – Marci