Как изменить порядок столбцов DataTable - PullRequest
83 голосов
/ 21 сентября 2010

Как изменить порядок столбцов Datatable в c #.

Пример:

Создан порядок типа таблицы SQL - Qty, Unit, Id, но в программе DataTable порядок - Id, Qty, Unit.В коде Позади я непосредственно передаю DataTable типу таблицы sql, поэтому порядок таблиц отличается.

DataTable columns are: `Id,Qty,Unit.`  I want this to be: `Qty,Unit,Id` 

Пожалуйста, помогите

Ответы [ 6 ]

210 голосов
/ 21 сентября 2010

Попробуйте использовать метод DataColumn.SetOrdinal .Например:

dataTable.Columns["Qty"].SetOrdinal(0);
dataTable.Columns["Unit"].SetOrdinal(1); 

ОБНОВЛЕНИЕ: Этот ответ получил гораздо больше внимания, чем я ожидал.Чтобы избежать путаницы и облегчить использование, я решил создать метод расширения для упорядочения столбцов в DataTable:

Метод расширения:

public static class DataTableExtensions
{
    public static void SetColumnsOrder(this DataTable table, params String[] columnNames)
    {
        int columnIndex = 0;
        foreach(var columnName in columnNames)
        {
            table.Columns[columnName].SetOrdinal(columnIndex);
            columnIndex++;
        }
    }
}

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

table.SetColumnsOrder("Qty", "Unit", "Id");

или

table.SetColumnsOrder(new string[]{"Qty", "Unit", "Id"});
6 голосов
/ 14 ноября 2013

Это основано на ответе "локали по умолчанию", но оно удалит недопустимые имена столбцов до установки порядкового номера.Это происходит потому, что если вы случайно отправите недопустимое имя столбца, произойдет сбой, и если вы поставите галочку, чтобы предотвратить его сбой, индекс будет неправильным, поскольку он будет пропускать индексы везде, где передано недопустимое имя столбца.1002 *

2 голосов
/ 09 февраля 2015

Я знаю, что это действительно старый вопрос ... и похоже, что на него ответили ... Но я попал сюда с тем же вопросом, но с другой причиной вопроса, и поэтому немного другой ответ сработал для меня. У меня есть хорошее многоразовое общее представление данных, которое берет предоставленный ему источник данных и просто отображает столбцы в их порядке по умолчанию. Я поместил псевдонимы, порядок столбцов и выделение на уровне табличного адаптера набора данных в конструкторе. Однако изменение порядка запросов на выборку столбцов, по-видимому, не влияет на столбцы, возвращаемые через набор данных. Я нашел единственный способ сделать это в конструкторе, это удалить все столбцы, выбранные в адаптере таблицы, добавив их обратно в том порядке, в котором вы хотите их выбрать.

0 голосов
/ 25 октября 2018

Данные для повторного заказа. Таблица, основанная на каком-либо условии или установленном флажке. ПФБ: -

 var tableResult= $('#exampleTable').DataTable();

    var $tr = $(this).closest('tr');
    if ($("#chkBoxId").prop("checked")) 
                    {
                        // re-draw table shorting based on condition
                        tableResult.row($tr).invalidate().order([colindx, 'asc']).draw();
                    }
                    else {
                        tableResult.row($tr).invalidate().order([colindx, "asc"]).draw();
                    }
0 голосов
/ 21 октября 2015

Вы также можете использовать:

dataview v=dt.defaultview;  // ( dt  datatable) 
v.sort="columnName ASC";  // ASC / DESC for ascending / descending order 
dt=v.toTable();

взято из https://social.msdn.microsoft.com/Forums/vstudio/en-US/6ae0341f-d8d7-4082-ae37-19e46f37306a/how-to-sort-columns-in-datatable?forum=wpf

0 голосов
/ 22 июля 2013

Мы можем использовать этот метод для изменения индекса столбца, но его следует применять ко всем столбцам, если число столбцов превышает два, в противном случае он покажет все неправильные значения из таблицы данных ......... ...........

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...