Как вы сортируете данные столбца и направление?

Мне нужно использовать в памяти DataTable на основе столбца и направления, которые поступают из GridView. Функция должна выглядеть так:

public static DataTable resort(DataTable dt, string colName, string direction)
{
    DataTable dtOut = null;

    ....
}

Мне нужна помощь в заполнении этой функции. Я думаю, что могу использовать оператор Select, но я не уверен, как это сделать. Я не могу нажимать на "Комментарии" из-за этого браузера, но вы можете показать мне на месте или новое решение DataTable, либо одно. Для людей, показывающих мне указатели, пожалуйста, мне нужна закодированная функция, аналогичная той, которая была прототипирована.

Как насчет:

// ds.Tables[0].DefaultView.Sort="au_fname DESC";
   public static void Resort(ref DataTable dt, string colName, string direction)
   {
        string sortExpression = string.Format("{0} {1}", colName, direction);
        dt.DefaultView.Sort = sortExpression;
   }

Ответ 1

Я предполагаю, что "direction" - это "ASC" или "DESC", а dt содержит столбец с именем "colName"

public static DataTable resort(DataTable dt, string colName, string direction)
{
    DataTable dtOut = null;
    dt.DefaultView.Sort = colName + " " + direction;
    dtOut = dt.DefaultView.ToTable();
    return dtOut;
}

ИЛИ без создания dtOut

public static DataTable resort(DataTable dt, string colName, string direction)
{
    dt.DefaultView.Sort = colName + " " + direction;
    dt = dt.DefaultView.ToTable();
    return dt;
}

Ответ 2

Если у вас есть только один DataView, вы можете отсортировать его:

table.DefaultView.Sort = "columnName asc";

Не пробовал, но я думаю, вы можете сделать это с любым количеством DataViews, если вы ссылаетесь на правильный.

Ответ 3

Фактически такая же проблема. Для меня это было легко:

Добавление данных в Datatable и сортировка:

dt.DefaultView.Sort = "columnname";
dt = dt.DefaultView.ToTable();

Ответ 4

В DataTables есть перегруженный метод Select, который вы можете сделать для этого. См. Здесь: http://msdn.microsoft.com/en-us/library/way3dy9w.aspx

Но возврат val для вызова Select не является DataTable, а массивом объектов RowData. Если вы хотите вернуть DataTable из своей функции, вам придется строить ее с нуля на основе этого массива данных. Вот сообщение, которое адресует и предоставляет образец для обеих проблем: http://social.msdn.microsoft.com/Forums/en-US/winformsdatacontrols/thread/157a4a0f-1324-4301-9725-3def95de2bf2/

Ответ 5

Создайте DataView. Вы не можете сортировать DataTable напрямую, но вы можете создать DataView из DataTable и отсортировать его.

Создание: http://msdn.microsoft.com/en-us/library/hy5b8exc.aspx

Сортировка: http://msdn.microsoft.com/en-us/library/13wb36xf.aspx

В следующем примере кода создается представление, показывающее все продукты где количество единиц в запасе меньше или равно уровень переупорядочения, отсортированный сначала по идентификатору поставщика, а затем по названию продукта.

DataView prodView = new DataView(prodDS.Tables["Products"], "UnitsInStock <= ReorderLevel", "SupplierID, ProductName", DataViewRowState.CurrentRows);

Ответ 6

Если вы хотите сортировать более одного направления

  public static void sortOutputTable(ref DataTable output)
        {
            DataView dv = output.DefaultView;
            dv.Sort = "specialCode ASC, otherCode DESC";
            DataTable sortedDT = dv.ToTable();
            output = sortedDT;
        }