web-dev-qa-db-ja.com

WinFormsのdatagridviewで文字列を数値としてソートする方法

Datagridviewに数字のある文字列列があります。バインドされていません。使用した数字で並べ替えたいです。

colid.ValueType = typeof(int);
grid.Sort(colid, ListSortDirection.Descending);

しかし、文字列のようなものです。例:

11
12
23
7
80
81

期待されている間

7
11
12
23
80
81
17
Thunder

SortCompareイベントに登録できます。次に例を示します。

private void customSortCompare(object sender, DataGridViewSortCompareEventArgs e)
{
    int a = int.Parse(e.CellValue1.ToString()), b = int.Parse(e.CellValue2.ToString());

    // If the cell value is already an integer, just cast it instead of parsing

    e.SortResult = a.CompareTo(b);

    e.Handled = true;
}

...
yourGridview.SortCompare += customSortCompare;
...

私はそれがうまくいくかどうかをチェックしませんでした、しかしあなたは考えを理解します...;)

21
AndiDog

列に値を割り当てると、Int32に変換できます。

DataGridView.Cells["example"].Value= Convert.ToInt32(text);

そしてそれは正しくソートされます

13
user2612427

問題は、文字列値を並べ替えることです。列をロードするときは、次のような列の値のタイプを選択する必要があります。

dt.Columns.Add( "ColumnName"、typeof(int));

2
Fipomat

次のようなクラスを作成します。

class Sort : IComparer
{
    public int Compare(object x, object y)
    {
        return -int.Parse((string)x).CompareTo(int.Parse((string)y)); //sort descending
        //return int.Parse((string)x).CompareTo(int.Parse((string)y)); //sort ascending
    }
}

そして、やります

grid.Sort( new Sort() );
0
Mikael Svenson