Я объявляю строку SQL, которая выглядит примерно так:
string SQL = "SELECT Column1, Column2, Column3, Date1, Date2 FROM Somewhere";
Количество столбцов может варьироваться в зависимости от обстоятельств, а даты можно назвать разными именами, такими как StartDate, InterestDate и т.д.
Что я хотел бы сделать, это связать это с репитером ASP.NET и создать таблицу, как показано ниже для примера выше:
<table>
<tr>
<th>Column1</th>
<th>Column2</th>
<th>Column3</th>
<th>Date1</th>
<th>Date2</th>
</tr>
<tr>
Rows of values...
</tr>
</table>
Я в порядке с привязкой данных к Repeater и использованием Eval, но это зависит от фиксированного количества столбцов и имен столбцов. Можно ли это сделать программным способом?
Если вы используете GridView, вы можете установить для свойства столбца AutoGenerate значение true (по умолчанию оно истинно), а затем привязать GridView к вашим данным.
Чтобы сделать супер простым, вы можете использовать элемент управления SQLDataSource.
сайт asp.net содержит обзор привязки данных в asp.net(использует ObjectDataSource, но понятия точно такие же), На этой странице также описаны некоторые способы настройки GridView.
Обновление. Ниже приведен пример того, как вы можете обрабатывать событие rowdataound для форматирования столбцов даты (в комментариях к другому ответу). Это, вероятно, можно было бы сделать лучше, но это должно заставить вас начать.
protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
DataRowView rowView = (DataRowView)e.Row.DataItem;
for (int i = 0; i < rowView.Row.ItemArray.Length; i++)
{
DateTime? tmpDate = rowView[i] as DateTime?;
if (tmpDate.HasValue)
{
if (tmpDate.Value.Second > 0)
e.Row.Cells[i].Text = tmpDate.Value.ToShortTimeString();
else
e.Row.Cells[i].Text = tmpDate.Value.ToShortDateString();
}
}
}
Здесь приведена ссылка на пример динамического создания повторителя во время выполнения. Единственное требование состоит в том, чтобы ASP: Panel была в вашей форме, чтобы вставить ее.
http://programming.top54u.com/post/ASP-Net-Repeater-dynamically-using-C-sharp-code.aspx
Вы можете использовать GridView
, который автоматически создает столбцы на основе источника данных.
Если вы используете DataReader для получения данных, столбцы могут быть доступны с их индексами, а не с их именами. Вы должны иметь возможность прокручивать их все, даже если их число не является постоянным.
<% while(myRepeaterWithData.Read()) {
for (int i = 0; i < myReaderWithData.FieldCount; i++) { %>
The data on this row in column number <%= i%> is
<%= myRepeaterWithData[i] %>.
<% }
} %>