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.