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

Как изменить порядок столбцов 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` 

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

 Christian24 мар. 2015 г., 14:31
Просто ответь на ОП уже.
 Vyas Dev21 сент. 2010 г., 09:20
я создал порядок таблицы типа SQLQty,Unit,Id  но в программе DataTable порядок естьId,Qty,Unit, В коде «Позади» я непосредственно передаю DataTable типу таблицы sql, поэтому порядок таблиц отличается. Вот почему меня спрашивают «как изменить порядок столбцов?».
 KBoek21 сент. 2010 г., 09:12
Можете ли вы объяснить, почему вы хотите изменить порядок столбцов?
 vc 7421 сент. 2010 г., 09:11
Это скорее функция пользовательского интерфейса, которую вы можете изменить, определив столбцы сетки isnt'it?

Ответы на вопрос(1)

Решение Вопроса

Попробуйте использовать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"});
 jonathana13 дек. 2016 г., 14:56
очень полезно, тнкс
 Vyas Dev21 сент. 2010 г., 09:36
давая, как вы сказали, структура таблицы изменилась наQty,Id,Unit  только. Я хочу, как этоQty,Unit,Id.
 default locale22 сент. 2015 г., 16:02
@JoelFan Я обновил свой ответ, спасибо! Ваш код определенно выглядит чище.
 JoelFan18 сент. 2015 г., 01:16
лучшее тело метода: var colIndex = 0; foreach (var colName in columnNames) table.Columns [colName] .SetOrdinal (colIndex ++);
 cura07 нояб. 2017 г., 20:20
Благодарю вас из Бразилии.
 default locale21 сент. 2010 г., 10:02
Ofc, вы должны использовать этот метод для всех столбцов, кроме последнего.

Ваш ответ на вопрос