gpt4 book ai didi

c# - DataGridView 自定义排序

转载 作者:太空狗 更新时间:2023-10-30 01:09:19 27 4
gpt4 key购买 nike

我有一个包含 6 列的 DataGridView。

例子:

column1    column2    column3    column4    column5    column6
J6 RES-0112G 123.123 456.456 180 1111
FID2 FIDUCIAL 5.123 -50.005 90 FIDUCIAL
R100 RES-0113G 1.1 -123.123 90 1111
C12 CAP-1234H -99.99 -987.123 45 2222
Q1 CAP-1234Z -99.99 -987.123 45 4444
J3 RES-0112G 123.123 999.999 0 1111
FID1 FIDUCIAL 23.123 23.123 0 FIDUCIAL
F1 CAP-1234 -88.99 -555.111 45 DDDD
C11 CAP-1234Z -123.99 -123.123 270 abc2222

我想按特殊顺序对它进行排序。假设我想按此序列中的最后一个值 (第 6 列) 对其进行排序:

基准, 1111, 2222, DDDD, 4444

然后按第二列字母数字顺序对其进行二次排序。 (注意 abc2222 按“2222”而不是“abc”排序)

所以更新后的 DataGridView 看起来像这样:(对于 FIDUCIALS,我想按第 1 列而不是第 2 列排序)

column1    column2    column3    column4    column5    column6
FID1 FIDUCIAL 23.123 23.123 0 FIDUCIAL
FID2 FIDUCIAL 5.123 -50.005 90 FIDUCIAL
J6 RES-0112G 123.123 456.456 180 1111
J3 RES-0112G 123.123 999.999 0 1111
R100 RES-0113G 1.1 -123.123 90 1111
C11 CAP-1234C -123.99 -123.123 270 abc2222
C12 CAP-1234H -99.99 -987.123 45 2222
F1 CAP-1234 -88.99 -555.111 45 DDDD
Q1 CAP-1234Z -99.99 -987.123 45 4444

有谁知道如何正确排序?我正在使用 SortableBindingList<>

最佳答案

我创建了一个示例代码来向您展示该技术本身。我希望您不会觉得适应您的需求很复杂。基本思想是按所需列分组,然后在组内应用自定义排序。我没有掌握column6的排序算法,所以我根据你的样本数据做了一个简单的排序。希望对您有所帮助!

class Program
{
public class Row
{
public string Column1 { get; set; }
public string Column2 { get; set; }
public string Column3 { get; set; }
public string Column4 { get; set; }
public string Column5 { get; set; }
public string Column6 { get; set; }
}

static void Main(string[] args)
{
var grid = new []
{
new Row { Column1 = "J6", Column2 = "RES-0112G", Column3 = "123.123", Column4 = "456.456", Column5 = "180", Column6 = "1111"},
new Row { Column1 = "FID2", Column2 = "FIDUCIAL", Column3 = "5.123", Column4 = "-50.005", Column5 = "90", Column6 = "FIDUCIAL"},
new Row { Column1 = "R100", Column2 = "RES-0113G", Column3 = "1.1", Column4 = "-123.123", Column5 = "90", Column6 = "1111"},
new Row { Column1 = "C12", Column2 = "CAP-1234H", Column3 = "-99.99", Column4 = "-987.123", Column5 = "45", Column6 = "2222"},
new Row { Column1 = "Q1", Column2 = "CAP-1234Z", Column3 = "-99.99", Column4 = "-987.123", Column5 = "45", Column6 = "4444"},
new Row { Column1 = "J3", Column2 = "RES-0112G", Column3 = "123.123", Column4 = "999.999", Column5 = "0", Column6 = "1111"},
new Row { Column1 = "FID1", Column2 = "FIDUCIAL", Column3 = "23.123", Column4 = "23.123", Column5 = "0", Column6 = "FIDUCIAL"},
new Row { Column1 = "F1", Column2 = "CAP-1234", Column3 = "-88.99", Column4 = "-555.111", Column5 = "45", Column6 = "DDDD"},
new Row { Column1 = "C11", Column2 = "CAP-1234C", Column3 = "-123.99", Column4 = "-123.123", Column5 = "270", Column6 = "abc2222"}
};

var result = grid.
GroupBy(r => GetSortValue(r.Column6)).
OrderBy(g => g.Key, new Column6Comparer()).
SelectMany(g => g.OrderBy(r => r, new RowComparer()));

foreach (var row in result)
{
Console.WriteLine("{0,-6}{1,-13}{2,-10}{3,-12}{4,-6}{5,-10}", row.Column1, row.Column2, row.Column3, row.Column4, row.Column5, row.Column6);
}
}

private static string GetSortValue(string source)
{
Match match = new Regex(@"[\d]+").Match(source);
return match.Success ? match.Value : source;
}

private class Column6Comparer : IComparer<string>
{
private Dictionary<string, int> ValueToOrder { get; set; }
public Column6Comparer()
{
ValueToOrder = new Dictionary<string, int>();
ValueToOrder["FIDUCIAL"] = 0;
ValueToOrder["1111"] = 1;
ValueToOrder["2222"] = 2;
ValueToOrder["DDDD"] = 3;
ValueToOrder["4444"] = 4;
}

public int Compare(string x, string y)
{
return ValueToOrder[GetSortValue(x)].CompareTo(ValueToOrder[GetSortValue(y)]);
}

}

private class RowComparer : IComparer<Row>
{
public int Compare(Row x, Row y)
{
if (x.Column2 == "FIDUCIAL" && y.Column2 == "FIDUCIAL")
{
return x.Column1.CompareTo(y.Column1);
}

if (x.Column2 == "FIDUCIAL" || y.Column2 == "FIDUCIAL")
{
return x.Column2 == "FIDUCIAL" ? 0 : 1;
}

return x.Column2.Substring(4).CompareTo(y.Column2.Substring(4));
}
}
}

关于c# - DataGridView 自定义排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7110673/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com