これを行う非常に簡単な方法の 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 つは、同順位の場合に何ができるかを示しています (この例は、ソート タイブレーカーとして別の列でソートすることを示しています)。