質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

1回答

240閲覧

DataGridView ソート

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2017/11/28 07:50

編集2017/11/29 08:42

WinFormsのDataGridViewでソートの定義をカスタマイズしたいのですが、どうもうまくいきません。
DataSourceはバインドしていません。
カラムは複数存在しますが、ソートはカラムヘッダーでクリックしたその1列だけソートできれば、他の列はどうなっていても構いません。

列1
ーーーーー
固定
ーーーーー
10
ーーーーー
100
ーーーーー
null
ーーーーー
null
ーーーーー

列1(カラム)のタブをクリックするとソートが行われますが、私の期待値としては

列1
ーーーーー
固定
ーーーーー
100
ーーーーー
10
ーーーーー
null
ーーーーー
null
ーーーーー

になってほしいです。
条件としては
・1行目は何があっても常に一番上。
・nullのセルは必ず下方へ。
つまり、数値が入っているセルだけが昇降される。

たくさん試しましたが完全に行き詰ったのでご教授していただけると幸いです。
よろしくお願いいたします。

C#

1public partial class Form1 : Form 2 { 3 public Form1() 4 { 5 InitializeComponent(); 6 dataGridView1.Rows.Add("固定"); 7 dataGridView1.Rows.Add("10"); 8 dataGridView1.Rows.Add("100"); 9 dataGridView1.Rows.Add(); 10 dataGridView1.Rows.Add(); 11 12 } 13 private void dataGridView1_SortCompare_1(object sender, DataGridViewSortCompareEventArgs e) 14 { 15 if (e.CellValue1 == null || e.CellValue2 == null) 16 { 17 e.SortResult = 0; 18 } 19 20 else if(e.CellValue1.ToString() == "固定" || e.CellValue2.ToString() == "固定") 21 { 22 e.SortResult = 0; 23 } 24 else 25 { 26 int a = Convert.ToInt32(e.CellValue1); 27 int b = Convert.ToInt32(e.CellValue2); 28 int sum = a - b; 29 if (sum < 0) 30 { 31 e.SortResult = 1; 32 } 33 else if (sum > 0) 34 { 35 e.SortResult = -1; 36 } 37 else if (sum == 0) 38 { 39 e.SortResult = 0; 40 } 41 } 42 43 e.Handled = true; 44 } 45 } 46

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ebiryo

2017/11/29 04:19

対象はWinFormsですか?
退会済みユーザー

退会済みユーザー

2017/11/29 07:15

はい、そうです。
ebiryo

2017/11/29 08:26 編集

カラムは複数あるのでしょうか? 複数カラムが存在する場合、条件としてあげられている挙動は列1カラムのヘッダーでクリックした時だけでしょうか? どういったことを試されたのか、記述したほうが良いと思います
退会済みユーザー

退会済みユーザー

2017/11/29 08:28

情報が少なくお手数をおかけして大変申し訳ございません。カラムは複数存在しますが、ソートはカラムヘッダーでクリックしたその1列だけソートできれば、他の列はどうなっていても構いません。
ebiryo

2017/11/30 03:09

たびたび申し訳ないのですが、「数値が入っているセル」とありますがコードでは列1には文字列がにセットされているようですが。列1のデータ型はなんなのでしょうか?
guest

回答1

0

動作確認していませんが、気になったところだけ。

int a = Convert.ToInt32(e.CellValue1); int b = Convert.ToInt32(e.CellValue2);

int に変換したうえで比較しているので、「100,10」の順ではなく「10,100」の順になっているのかと。
int に変換せず string として比較してはどうでしょうか。

また、セルの値には null が入る可能性があるようですが、これはC#における null のことでしょうか、それとも DBNull.Value のことでしょうか。

投稿2017/11/29 08:58

alg

総合スコア2019

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問