it-swarm-ru.tech

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

Мне нужно использовать в памяти 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;
   }
71
Sam Gentile

Я предполагаю, что "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;
}
104
Berkay Turancı

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

table.DefaultView.Sort = "columnName asc";

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

65
Alex

На самом деле получил ту же проблему. Для меня это сработало так:

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

dt.DefaultView.Sort = "columnname";
dt = dt.DefaultView.ToTable();
14
Kᴀτᴢ

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

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

7
Paul Sasik

Создайте 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);

4
Jakub Konecki

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

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