この質問は、これら 2 つ ( thisおよびthis )と密接に関連していますが、満足のいく答えが得られるとは思いません。
文字列、整数、浮動小数点数の異なるデータ型の複数の列 ( ) を持つDataGridView
(テーブルなど) があります。DataGridViewTextBoxColumn
それぞれのヘッダーをクリックすると、それぞれがタイプに従ってソートされる必要があります。文字列はアルファベット順に、数値は数値になります。簡単に言えば、次のコードがあります。
private System.Windows.Forms.DataGridView grid;
private System.Windows.Forms.DataGridViewTextBoxColumn stringColumn;
private System.Windows.Forms.DataGridViewTextBoxColumn doubleColumn;
private System.Windows.Forms.DataGridViewTextBoxColumn intColumn;
stringColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
doubleColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
intColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
grid.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
stringColumn,
doubleColumn,
intColumn});
ただし、デフォルトの表現はstring
であるため、数値もアルファベット順に並べ替えられます。たとえば、次のようになります。
1, 11, 2, 3, 42, 5
どうやら、これを回避する簡単な方法として、いくつかのスレッド (たとえばhereおよびhere ) によると、次の方法ですぐに問題を解決できるはずです。
doubleColumn.ValueType = typeof(double);
intColumn.ValueType = typeof(int);
ただし、このソリューションは私のプロジェクトでは機能しません。値はまだアルファベット順にソートされています。では、問題は次のとおりです。デバッガーでは、値の型が実際に (このdouble
場合)に変更されていることがわかりましたSystem.Double
。少なくとも何かが起こっています。しかし、独自のソーターを作成せずに、実際に適切にソートされるようにするにはどうすればよいでしょうか?