2012-06-14 4 views
0

У меня есть вид списка, который связан с источником DataTable. Сортировочные работы, вид.asp.net ListView сортировка численно

Для текста в порядке, но не столько для чисел.

Например, если я сортирую 1-12 по убыванию, я получаю 9,8,7,6,5,4,3,2,12,11,10,1.

Как получить правильную последовательность?

Я использую:

lvPos.Sort("Position", SortDirection.Descending); 
+0

если вы используете IEnumerable в качестве источника данных в виде списка, вы можете использовать LINQ для сортировки и повторно связать. – Damith

+0

, который не работает, я делал это так, как изначально, но эта ошибка происходит: Источник данных «reportObjectDataSource» не поддерживает сортировку с данными IEnumerable. Автоматическая сортировка поддерживается только с помощью DataView, DataTable и DataSet, поэтому DataTable позволяет сортировать. –

+0

Возможный дубликат [как сортировать целые числа в списке] (http://stackoverflow.com/questions/1214289/how-do-i-sort-integers-in-a-listview) – Esailija

ответ

0

Вы, вероятно, придется сделать сортировку себя вместо того, чтобы полагаться на метод сортировки ListView в.

Если вы сортируете только код, это очень просто. Просто перетащите свой DataTable в DataView и используйте метод Sort DataView. Затем привяжите к DataView вместо DataTable.

var view = new DataView(dtTable); 
view.Sort = "Position"; //or "Position DESC" 
lvPos.DataSource = view; 
lvPos.DataBind(); //use lvPos.DataBind(true) to raise the "OnDataBinding" event. 

Если вы сортировка из методов сортировки в ListView в (то есть у вас есть что-то на странице запуская ListView.Sorting/отсортированные события), то вы должны зацепить к перебору событию и отменить его. Следуйте за предыдущей техникой перетаскивания DataTable в DataView (или повторно использовать DataView!), Сортируйте по новому выражению и перепроверьте свои данные.

private void lvPos_Sorting(object sender, ListViewSortEventArgs args) 
{ 
    var view = new DataView(dtTable); 
    view.Sort = args.SortExpression; 
    lvPos.DataSource = view; 
    lvPos.DataBind(); 
    args.Cancel = true; 
} 
+0

Я не знаком с e.SortExpression; выражение выше. Вызывается ли lvPos_Sorting при установке OnSorting = "lvPos_Sorting"? где определено eSortExpression? Страница aspx? –

+0

Мой плохой. e.sortExpression должно быть аргументом args.sortExpression. Я сделал соответствующее изменение. И да, lvPos_Sorting вызывается, если вы помещаете OnSorting = "lvPos_Sorting" в тег для вашего элемента управления listview. SortExpression является членом ListViewSortEventArgs. – villecoder

0

Самый простой способ фактически установить тип данных, например, так:

table.Columns[0].DataType = System.Type.GetType("System.Int32"); 

Теперь вид фактически сортирует элементы по значению, как Интс, не как строки.

See here

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