Из-за того, как работает сортировка DataTable (и DataView), вы не можете напрямую использовать делегированный подход. Одним из обходных путей является добавление столбца в таблицу данных, представляющего порядок, и установка значения (для каждой строки) на основе требуемой последовательности. Затем вы можете добавить сортировку к представлению в этом новом столбце. Например (используя LINQ для сортировки, просто для краткости):
var sorted = table.Rows.Cast<DataRow>().OrderBy(row => your code);
int sequence = 0;
foreach(var row in sorted)
{
row["sequence"] = sequence++;
}
(если у вас есть типизированный набор данных, то я не думаю, что вам нужен шаг Cast, или вы бы использовали ваш типизированный подкласс DataRow)
[изменить, чтобы включить 2.0]
В 2.0 (т. Е. Без LINQ и т. Д.) Вы могли бы использовать List<T>
для сортировки - немного более многословно, но:
List<DataRow> sorted = new List<DataRow>();
foreach(DataRow row in table.Rows)
{
sorted.Add(row);
}
sorted.Sort(delegate(DataRow x, DataRow y) { your code });
int sequence = 0;
foreach(DataRow row in sorted)
{
row["sequence"] = sequence++;
}
(снова замените DataRow, если вы используете типизированный набор данных)