C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: データソースを設定したグリッドのカスタムソート


(過去ログ 144 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■84410 / inTopicNo.1)  データソースを設定したグリッドのカスタムソート
  
□投稿者/ nabel (1回)-(2017/06/29(Thu) 12:32:07)

分類:[VB.NET/VB2005 以降] 

言語:VB2013

DataTableをDataSourceとしたDataGridViewで
独自のロジックでカスタムソートを行いたいのですが、
どのように行えばいいのでしょうか?

以前、IComparableインタフェースを実装したクラスを用意し、
独自ロジックでListのソートを行った経験がありますが、
DataSourceを使用したDataGridViewではこれが使えないようです。

DataTableよりDataViewを取得し、
DataViewのSortメソッドを使うことも考えましたが、
Sortメソッドの引数はカラム名のため、
ソート用のカラムを用意し、ソート順を示す値をここに入れればいいのかも知れませんが、
現状、2つの値を比較して、どちらを上位とするかというロジック(いわゆるCompareToのロジック)
しか用意していないため、この方法が使えません。

何かいい方法はないでしょうか?
引用返信 編集キー/
■84420 / inTopicNo.2)  Re[1]: データソースを設定したグリッドのカスタムソート
□投稿者/ PANG2 (181回)-(2017/06/30(Fri) 14:28:37)
No84410 (nabel さん) に返信
> ソート用のカラムを用意し、ソート順を示す値をここに入れればいいのかも知れませんが、
> 現状、2つの値を比較して、どちらを上位とするかというロジック(いわゆるCompareToのロジック)
> しか用意していないため、この方法が使えません。

その方法で充分かと。

void AddSortColumn(DataTable dt, Comparison<DataRow> comparison)
{
	dt.Columns.Add("SortKey", typeof(int));
	DataRow[] rows = dt.Select();
	Array.Sort<DataRow>(rows, comparison);
	for (int i = 0; i < rows.Length; i++)
		rows[i]["SortKey"]  = i;
	dt.AcceptChanges();
}

引用返信 編集キー/
■84422 / inTopicNo.3)  Re[2]: データソースを設定したグリッドのカスタムソート
□投稿者/ nabel (2回)-(2017/06/30(Fri) 16:01:47)
なるほど!
ソート用のカラムを用意して、
DataTableの各行をカスタムソートして、
その結果の行インデックスをソート用のカラムにセットする、
ということですよね?
(私の理解が間違っていたらご指摘ください。)

この方法でやってみます。
ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -