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

您正在寻找一种自然的排序网络上很多 实现 ;我只是选择其中之一并将其复制到您的项目中。

现在,由于您想在 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 回答