2

のリストがあり<string[]>ます。
追加されたアイテムは次のようになります

list.Add(new string[]{"1", "A", "333", "666", "16.02.2013 03:00"});
list.Add(new string[]{"2a", "A", "333", "666", "16.02.2013 03:00"});
list.Add(new string[]{"2", "A", "333", "666", "16.02.2013 03:00"});
list.Add(new string[]{"3a", "A", "333", "666", "16.02.2013 03:00"});
list.Add(new string[]{"3b", "A", "333", "666", "16.02.2013 03:00"});
list.Add(new string[]{"4", "A", "333", "666", "16.02.2013 03:00"});
list.Add(new string[]{"5", "A", "333", "666", "16.02.2013 03:00"});
list.Add(new string[]{"10", "A", "333", "666", "16.02.2013 03:00"});
list.Add(new string[]{"11", "A", "333", "666", "16.02.2013 03:00"});

ファイルからデータを解析してリストに追加した後、DataGridViewにすべてのデータを表示する必要があります。また、DataGridViewにすべてのデータを追加した後、ユーザーが列ヘッダーをクリックしてデータを並べ替えられるようにします。

問題は、ユーザーが最初の列で行を並べ替える場合、次のように並べ替えられることです。

1   A   333 666 16.02.2013 03:00
10  A   333 666 16.02.2013 03:00
11  A   333 666 16.02.2013 03:00
2   A   333 666 16.02.2013 03:00
2a  A   333 666 16.02.2013 03:00
3a  A   333 666 16.02.2013 03:00
3b  A   333 666 16.02.2013 03:00
4   A   333 666 16.02.2013 03:00
5   A   333 666 16.02.2013 03:00

しかし、正しい方法はこれです:

1   A   333 666 16.02.2013 03:00
2   A   333 666 16.02.2013 03:00
2a  A   333 666 16.02.2013 03:00
3a  A   333 666 16.02.2013 03:00
3b  A   333 666 16.02.2013 03:00
4   A   333 666 16.02.2013 03:00
5   A   333 666 16.02.2013 03:00
10  A   333 666 16.02.2013 03:00
11  A   333 666 16.02.2013 03:00

自然ソートを使用して、配列の特定のインデックスで文字列配列のリストをソートするにはどうすればよいですか?
LINQを使用できません

4

1 に答える 1

1

あなたは自然順を探しています。Webには多くの 実装 があります。それらの1つを選択して、プロジェクトにコピーします。

ここで、DataGridViewで並べ替える必要があるため、SortCompareイベントにアタッチして、そこでカスタムの並べ替えを行う必要があります。次のようになります。

private void dataGridView1_SortCompare(object sender, DataGridViewSortCompareEventArgs e)
{
    // Since you want a natural sort in the first column
    if (e.Column.Index == 0)
    {
        // Create an instance of your natural sort comparer here
        IComparer<string> comparer = new YourNaturalComparer()

        // Perform the sort
        e.SortResult = comparer.Compare(
            e.CellValue1.ToString(), e.CellValue2.ToString());

        // Signal that we handled the sorting for this column
        e.Handled = true;
    }
}
于 2013-02-17T17:40:08.150 に答える