11

この質問は、これら 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。少なくとも何かが起こっています。しかし、独自のソーターを作成せずに、実際に適切にソートされるようにするにはどうすればよいでしょうか?

4

4 に答える 4