我有一個綁定到DataTable源的列表視圖。 排序工程,有點兒。asp.net ListView按數字順序排序
對於文字很好,但沒有太多的數字。
例如,如果我排序1-12降序我得到9,8,7,6,5,4,3,2,12,11,10,1。
如何獲得正確的序列?
我使用:
lvPos.Sort("Position", SortDirection.Descending);
我有一個綁定到DataTable源的列表視圖。 排序工程,有點兒。asp.net ListView按數字順序排序
對於文字很好,但沒有太多的數字。
例如,如果我排序1-12降序我得到9,8,7,6,5,4,3,2,12,11,10,1。
如何獲得正確的序列?
我使用:
lvPos.Sort("Position", SortDirection.Descending);
你很可能將不得不做整理自己而不是依賴於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;
}
我不熟悉e.SortExpression;上面的表達。當你設置OnSorting =「lvPos_Sorting」時,lvPos_Sorting會被調用嗎? e.SortExpression在哪裏定義? aspx頁面? –
我的不好。 e.sortExpression應該是args.sortExpression。我做了適當的編輯。是的,如果你在你的listview控件的標籤中放置了OnSorting =「lvPos_Sorting」,lvPos_Sorting會被調用。 SortExpression是ListViewSortEventArgs的成員。 – villecoder
最簡單的方法:
table.Columns[0].DataType = System.Type.GetType("System.Int32");
現在的那種實際值作爲整數,而不是字符串進行排序的項目。
,如果你使用的IEnumerable數據源,你可以使用LINQ的排序和重新綁定列表視圖。 – Damith
不起作用我最初是這麼做的,但是這個錯誤發生了:數據源'reportObjectDataSource'不支持用IEnumerable數據排序。自動排序僅支持DataView,DataTable和DataSet,因此DataTable允許排序。 –
可能重複的[我如何排序整數在列表視圖](http://stackoverflow.com/questions/1214289/how-do-i-sort-integers-in-a-listview) – Esailija