DataView.Sort - больше, чем просто asc / desc (требуется настраиваемая сортировка)

Хорошо, я просто быстро придумал aspx это и не выполнил всю необходимую asp.net-website обработку ошибок и нулевую c#.net проверку, но это должно дать aspx вам представление и должно c#-language быть достаточно, чтобы вы aspx начали:

public static class DataTableExtensions
{
    public static DataView ApplySort(this DataTable table, Comparison comparison)
    {

        DataTable clone = table.Clone();
        List rows = new List();
        foreach (DataRow row in table.Rows)
        {
            rows.Add(row);    
        }

        rows.Sort(comparison);

        foreach (DataRow row in rows)
        {
            clone.Rows.Add(row.ItemArray);
        }

        return clone.DefaultView;
    }


}

Использование:

    DataTable table = new DataTable();
    table.Columns.Add("IntValue", typeof(int));
    table.Columns.Add("StringValue");

    table.Rows.Add(11, "Eleven");
    table.Rows.Add(14, "Fourteen");
    table.Rows.Add(10, "Ten");
    table.Rows.Add(12, "Twelve");
    table.Rows.Add(13, "Thirteen");

// Сортировать asp.net-website по StringValue:

 DataView sorted = table.ApplySort((r, r2) =>
        {
            return ((string)r["StringValue"]).CompareTo(((string)r2["StringValue"]));
        });

Результат:

11 c#-language Eleven

14 четырнадцать

10 десять

13 asp-net тринадцать

12 Двенадцать

// Сортировать asp-net по IntValue:

DataView sorted = table.ApplySort((r, r2) =>
            {
                return ((int)r["IntValue"]).CompareTo(((int)r2["IntValue"]));
            });

Результат:

10 csharp десять

11 Eleven

13 тринадцать

12 csharp Двенадцать

14 четырнадцать

РЕДАКТИРОВАТЬ: изменено aspx на метод расширения.

Теперь asp-net в вашей Lambda (или вы можете asp.net создать полномасштабный метод c#.net сравнения) вы можете выполнять aspdotnet любую настраиваемую логику visual-c# сортировки, которая вам нужна. Помните, что asp.net -1 меньше, 0 равно, а 1 больше.

c#

asp.net

2022-11-20T22:10:42+00:00