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

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

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

Re[3]: DataGridViewの複数列ソート


(過去ログ 106 を表示中)

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

■63455 / inTopicNo.1)  DataGridViewの複数列ソート
  
□投稿者/ シン (1回)-(2012/08/27(Mon) 15:59:29)

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

2012/08/27(Mon) 16:30:18 編集(投稿者)

(「A列をクリック」→「A列ヘッダをクリック」に記載を変更しました。)
開発言語:VB2008

2列のDataGridView(非バインド)のソートを、列ヘッダをクリックでソートしようと考えています。
単純に列の文字列順または数値順で昇順/降順でソートするのであれば、各カラムのSortModeをAutoMaticにすることにより実現できることは確認したのですが、
今回はちょっと変わったソートを行いたいと考えています。

A列ヘッダをクリックした場合・・・A列の昇順/降順で、B列の昇順
B列ヘッダをクリックした場合・・・B列の昇順/降順で、A列の昇順

色々と調べたところ、以下にソートのカスタマイズ法が載っていましたのでこれを試してみました。

http://dobon.net/vb/dotnet/datagridview/customsort.html

ただ、分からないことが出てきました。
例えば、A列ヘッダをクリックした場合、次のA列のソート方向が昇順である場合は、A列の昇順−B列の昇順となりOKなのですが、
再度A列ヘッダをクリックした場合、A列は降順となり、A列は降順となりますが、A列が同じ場合はB列の降順となってしまいます。
これは、A列のソート方向の情報を考慮していないため、A列の内容が同じ時は、B列はA列のソート方向でソートしているため、
このような現象になってしまっているのだと思います。
そこで、A列が降順の場合でも、A列の降順−B列の昇順としてソートを行うには、A列のソート方向を考慮する必要がありますが、
A列のヘッダがどちら向きにソートされるかを知る方法(あるいは前のA列のソート方向)を知る方法はないでしょうか?

分かりにくい文章で申し訳ありませんが、宜しくお願いします。


引用返信 編集キー/
■63457 / inTopicNo.2)  Re[1]: DataGridViewの複数列ソート
□投稿者/ shu (48回)-(2012/08/27(Mon) 17:21:13)
2012/08/27(Mon) 17:22:32 編集(投稿者)

No63455 (シン さん) に返信
> ただ、分からないことが出てきました。
> 例えば、A列ヘッダをクリックした場合、次のA列のソート方向が昇順である場合は、A列の昇順−B列の昇順となりOKなのですが、
> 再度A列ヘッダをクリックした場合、A列は降順となり、A列は降順となりますが、A列が同じ場合はB列の降順となってしまいます。
> これは、A列のソート方向の情報を考慮していないため、A列の内容が同じ時は、B列はA列のソート方向でソートしているため、
> このような現象になってしまっているのだと思います。
> そこで、A列が降順の場合でも、A列の降順−B列の昇順としてソートを行うには、A列のソート方向を考慮する必要がありますが、
> A列のヘッダがどちら向きにソートされるかを知る方法(あるいは前のA列のソート方向)を知る方法はないでしょうか?

A列のソートオーダーを設定しているのだから、B列は昇順になるのでは?
引用返信 編集キー/
■63464 / inTopicNo.3)  Re[2]: DataGridViewの複数列ソート
□投稿者/ シン (2回)-(2012/08/28(Tue) 10:23:39)
No63457 (shu さん) に返信

> A列のソートオーダーを設定しているのだから、B列は昇順になるのでは?

コメント有難うございます。
ただ、A列ヘッダクリック時に、A列の他にB列の内容も独自ロジックでソート順の数値化を行っているので、単純にA列・B列を独立させて
ソートを行うだけではうまくいかなかったのです。

ただ、SortCompareイベントで、クリックしたヘッダのSortGlyphDirection(e.Column.HeaderCell.SortGlyphDirection)を見ることにより、
問題を解決することができましたので報告します。
解決済み
引用返信 編集キー/
■63465 / inTopicNo.4)  Re[3]: DataGridViewの複数列ソート
□投稿者/ shu (49回)-(2012/08/28(Tue) 11:36:25)
No63464 (シン さん) に返信
> ■No63457 (shu さん) に返信
> ただ、SortCompareイベントで、クリックしたヘッダのSortGlyphDirection(e.Column.HeaderCell.SortGlyphDirection)を見ることにより、
これはA列のソート条件であり、B列はA列のソート方向に関わらず昇順なのでは?

> B列はA列のソート方向でソートしているため
この操作が間違っていたのではないのですか?
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -