C#: изменение порядка столбцов при привязке DataTable к GridView

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

Например, dataTable "dt" содержит два столбца "a" и "b". Я связываю его с GridView следующим образом:

gridView.DataSource = dt;
gridView.DataBind();

Но я бы хотел, чтобы GridView отображал "b" первым (крайним слева).

Важный момент: я использую это для экспорта в Excel, и нет фактического вывода на экран, используя:

 HtmlTextWriter htw = new HtmlTextWriter(sw);
 gridView.RenderControl(htw);

Спасибо!

2 ответа

Решение

Да, вы можете сделать это в передней части. Что-то вроде этого:

<asp:GridView runat="server" AutoGenerateColumns="false">
    <Columns>
        <asp:BoundField DataField="b" />
        <asp:BoundField DataField="a" />
    </Columns>
</asp:GridView>

РЕДАКТИРОВАТЬ:

Нет внешнего интерфейса, говорите? Это круто - мне нравится вызов:

            gridView.AutoGenerateColumns = false;
        gridView.Columns.Add(new BoundField { DataField = "b" });
        gridView.Columns.Add(new BoundField { DataField = "a" });

(Здорово предположить, что C#3 в эти дни не так ли?)

Это часто встречается в интервью. Вы выгружаете содержимое таблицы в файл Excel, и это нормально, и вы используете HTML в формате xl, что нормально. НО - вы берете содержимое таблицы базы данных и помещаете ее в память (DataTable). С течением времени, когда эти данные растут, они могут использовать все больше и больше памяти на сервере, особенно если есть параллельные запросы для этого отчета!!

Исправление: Вместо этого используйте DataReader и вручную заполните GridView (это решит проблему, о которой вы писали) - или, что еще лучше, используйте что-то вроде Simple OOXML и запишите данные непосредственно в xml-представление электронной таблицы.xlsx.

Другие вопросы по тегам