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

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

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

Re[1]: flexgridのソート方法がわかりません。


(過去ログ 117 を表示中)

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

■69006 / inTopicNo.1)  flexgridのソート方法がわかりません。
  
□投稿者/ まおまお (8回)-(2013/11/28(Thu) 13:19:19)

分類:[.NET 全般] 

Windows7,VisualStudio2010,c# です。

タイトルのとおりflexgridのソートの方法がわかりません。

aaa/1/2
bbb/3/1
ccc/2/3
eee/2/1

このような場合 2列目を優先してから3列目を週順でソートしたい場合

aaa/1/2
eee/2/1
ccc/2/3
bbb/3/1

どうすればよいのでしょうか?

ネットで調べても全くわかりませんでした。

.Sort のヘルプにて
void C1FlexGridBase.Sort(System.Collections.ICompare comparer) (+4オーバーロード)
指定された比較子を使用してグッドをソートします。

??
System.Collections.ICompare comparer が比較子だと思うのですが
比較子ってなんでしょう?

また、fGrid.Cols[1].Sort = C1.Win.C1FlexGrid.SortFlags.Ascending;
としてみたもののなんら変化が見られませんでした。
引用返信 編集キー/
■69010 / inTopicNo.2)  Re[1]: flexgridのソート方法がわかりません。
□投稿者/ 魔界の仮面弁士 (440回)-(2013/11/28(Thu) 14:03:39)
No69006 (まおまお さん) に返信
> .Sort のヘルプにて
Web のオンラインヘルプを見た感じだと、5 つのオーバーロードがあるようですね。
Sort(IComparer)
Sort(SortFlags, CellRange)
Sort(SortFlags, Int32)
Sort(Int32, Int32, IComparer)
Sort(SortFlags, Int32, Int32)


> System.Collections.ICompare comparer が比較子だと思うのですが
惜しい。微妙にスペルミス。正しくは
 System.Collections.IComparer (の Compare メソッド)
ですね。


IComparer.Compare メソッドは、「int Compare(object x, object y)」という
定義になっています。引数からは 2 つのデータが受け取れるので、開発者は
 ・x < y なら、戻り値として負数を返す。
 ・x = y なら、戻り値としてゼロを返す。
 ・x > y なら、戻り値として正数を返す。
ような実装をすることで、呼び出し元に並び順を伝えるという仕組みです。


下記に IComparer を用いた実装例があります。
(FlexGrid 向けのものではなく)string のコレクションを並び替えるサンプルです。
http://dobon.net/vb/dotnet/programing/icomparer.html
http://dobon.net/vb/dotnet/string/stringcomparer.html


で、FlexGrid 向けに実装するには、

(1) IComparer インターフェイスを実装したクラスを作成する。
→ class Hoge : IComparer { … } な感じで。

(2) それの Compare メソッドで、大小比較のコードを記述する。
→ 比較結果に応じて、-1・0・+1 のいずれかを戻り値として返すよう実装する。

(3) 作成したクラスのインスタンスを、Sort メソッドの引数に渡す。
→ c1FlexGrid.Sort(new Hoge());

という流れになるとなると思います。

私自身は C1FlexGrid を使ったことはありませんが、おそらくは
IComparer.Compare メソッドに Row オブジェクトが 2 つ渡されるので、
両行の「2 列目」同士の内容を比較すれば良いでしょう。比較してみて、
その大小結果を 負数/正数 で返し、同じだったらさらに 3 列目も比較して
同様に大小結果を負数/正数で返す(完全一致なら 0 を返す)ようにします。


> flexgridのソートの方法がわかりません。
ここでいう flexgrid とは、
MSFlexGrid とか MSHFlexGrid とか
VSFlexGrid とかのことではなく、
C1FlexGrid のことですね。
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -