2012-06-14 54 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并使用DataView的Sort方法即可。然后绑定到您的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;上面的表达。当你设置OnSorting =“lvPos_Sorting”时,lvPos_Sorting会被调用吗? e.SortExpression在哪里定义? aspx页面? –

+0

我的不好。 e.sortExpression应该是args.sortExpression。我做了适当的编辑。是的,如果你在你的listview控件的标签中放置了OnSorting =“lvPos_Sorting”,lvPos_Sorting会被调用。 SortExpression是ListViewSortEventArgs的成员。 – villecoder

0

最简单的方法:

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

现在的那种实际值作为整数,而不是字符串进行排序的项目。

See here