Как вы сортируете DataTable заданный столбец и направление? - PullRequest
71 голосов
/ 15 февраля 2011

Мне нужно применить в памяти 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;
   }

Ответы [ 6 ]

104 голосов
/ 25 декабря 2012

Я предполагаю, что "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;
}
65 голосов
/ 04 августа 2011

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

table.DefaultView.Sort = "columnName asc";

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

14 голосов
/ 10 ноября 2015

На самом деле есть та же проблема.Для меня сработал такой простой способ:

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

dt.DefaultView.Sort = "columnname";
dt = dt.DefaultView.ToTable();
7 голосов
/ 15 февраля 2011

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/

4 голосов
/ 15 февраля 2011

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

2 голосов
/ 24 января 2017

В случае, если вы хотите сортировать в нескольких направлениях

  public static void sortOutputTable(ref DataTable output)
        {
            DataView dv = output.DefaultView;
            dv.Sort = "specialCode ASC, otherCode DESC";
            DataTable sortedDT = dv.ToTable();
            output = sortedDT;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...