DataTableソースにバインドされたリストビューがあります。並べ替えは機能します、ちょっと。
テキストの場合は問題ありませんが、数字の場合はそれほど多くありません。
たとえば、1〜12の降順で並べ替えると、9,8,7,6,5,4,3,2,12,11,10,1になります。
適切なシーケンスを取得する方法は?
使ってます:
lvPos.Sort("Position", SortDirection.Descending);
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;
}
次のように実際にデータ型を設定する最も簡単な方法:
table.Columns[0].DataType = System.Type.GetType("System.Int32");
これで、並べ替えは実際にアイテムを文字列ではなくintとして値で並べ替えます。