0

DataTableソースにバインドされたリストビューがあります。並べ替えは機能します、ちょっと。

テキストの場合は問題ありませんが、数字の場合はそれほど多くありません。

たとえば、1〜12の降順で並べ替えると、9,8,7,6,5,4,3,2,12,11,10,1になります。

適切なシーケンスを取得する方法は?

使ってます:

lvPos.Sort("Position", SortDirection.Descending);
4

2 に答える 2

0

ListViewのsortメソッドに依存するのではなく、自分で並べ替えを行う必要がある可能性があります。

コードだけを使用してソートしている場合、これは非常に簡単です。DataTableをDataViewに押し込み、DataViewのSortメソッドを使用するだけです。次に、DataTableではなくDataViewにバインドします。

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 / Sortedイベントをトリガーするものがある場合)、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;
}
于 2012-06-14T19:18:49.133 に答える
0

次のように実際にデータ型を設定する最も簡単な方法:

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

これで、並べ替えは実​​際にアイテムを文字列ではなくintとして値で並べ替えます。

こちらをご覧ください

于 2012-06-14T21:51:17.407 に答える