2016-07-31 6 views
0

У меня есть Datagridview (dataGridView1), а источник данных - список (ставки). Я хотел бы заказать его по значению столбца Ascending (odd1). Как я могу это сделать?Сортировка Datagridview с datasource список

EDIT: Возможно, мне стоит заказать список перед заполнением datagridview? любое предложение?

EDIT2: У меня есть решение, но цифры ошибочны. Проверьте ПИК:

enter image description here

После 1,99 Я хотел бы иметь 2.00 instea в 10.57. Как мне это сделать?

EDIT3: Это часть моего класса:

общественная строка odd1 { ПОЛУЧИТЬ {возвращения (Odds.Count> = 3)? Коэффициенты [0]: «ошибка»; } set {if (Odds.Count> = 3) Коэффициенты [0] = значение; } }

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

Вы можете просто использовать Linq перед установкой источника данных в GridView в:

Edit: Поскольку тип 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

Он работает, спасибо, но есть небольшая проблема. Проверьте мой edit2 в моем вопросе, пожалуйста – Marci

+0

@Marci это потому, что тип odd1 является строкой, а не десятичной. Проверьте отредактированный ответ. – user3185569

+0

Я получил эту ошибку: строка ввода не была в правильном формате – Marci

Смежные вопросы