2012-06-14 82 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