0

並べ替えのために Int64 値を受け入れる datagridview のセルを作成したいと思います。

さらに、そのセルには、現在の値とデータグリッドビューの外にある参照値との差である追加の値が表示されます。

文字列として実行することもできますが、1、10、11、2.... などのように見えるため、並べ替えが正しく処理されません。

そこで、カスタムセルを作成してセル値を長く定義し、文字列を表示できれば素晴らしいと思いました...しかし、これが達成できるかどうかはわかりません....

誰かがこれを簡単な方法で達成する方法を知っていますか? datagridview を手動で読み込んでいますが、並べ替えを許可する列の型を定義していることに注意してください。

4

1 に答える 1

0

これを行う非常に簡単な方法の 1 つは、DataGridView のSortCompareイベントを使用することです。イベントを使用して、並べ替え対象の列にカスタム データが表示されていることを確認し、表示されている場合は、そのデータの数値部分を抽出して並べ替えを行います。

以下に例を示します。

private void dataGridView1_SortCompare(object sender, DataGridViewSortCompareEventArgs e) {
    if (e.Column.Index == 1) {  // This is your custom data's column.
        // Extract the numeric values from the cells being compared for the sort.
        // BEWARE: code assumes you'll always be able to extract a long from the cell contents.
        long cell1NumericValue = Int64.Parse(e.CellValue1.ToString().Split(' ')[0]);
        long cell2NumericValue = Int64.Parse(e.CellValue2.ToString().Split(' ')[0]);

        // Compare these numeric values to determine how to sort.
        e.SortResult = cell1NumericValue.CompareTo(cell2NumericValue);

        e.Handled = true;
    }
}

前提:
- カスタム データを含む列が列インデックス 1
にあること - カスタム データが数字とそれに続く少なくとも 1 つのスペースで構成されていること

私のコードは、セルの値の変換でエラーが発生しないことも前提としています。この変換が失敗する原因となる値がデータに含まれている可能性があります。その場合にできることは、変換前にデータを検証することです (null ではないなど)。検証に失敗した場合は、並べ替えの目的でセルの数値を -1 または何かに設定して、常に有効な値よりも低くなるようにします。他のセル。(それが理にかなっていることを願っています)。

これらの種類の並べ替えの適用については、この MSDN 記事で詳しく説明されています。あなたはおそらく見てみたいと思うでしょう。例の 1 つは、同順位の場合に何ができるかを示しています (この例は、ソート タイブレーカーとして別の列でソートすることを示しています)。

于 2011-09-01T23:06:16.180 に答える