Как программно добавить неизвестное количество столбцов с помощью повторителя, где некоторые столбцы объявлены во время выполнения в строке SQL?

2

Я объявляю строку 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, но это зависит от фиксированного количества столбцов и имен столбцов. Можно ли это сделать программным способом?

  • 0
    Лучший. Заглавие. Когда-либо. :-) Хороший вопрос, мне интересно, если это возможно без GridView.
  • 0
    Ах, теперь я понимаю сарказм! Спасибо @unforgiven3 Shog9 за то, что показал мне ошибку моих путей, и @unforgiven3 unforgiven3 за ваш комментарий. :-)
Показать ещё 2 комментария
Теги:
repeater

4 ответа

3
Лучший ответ

Если вы используете 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();
        }
    }
}
  • 0
    Это отличный учебник, если вы знаете, что вы связываете тоже. В этом случае я не знаю, какие столбцы будут выходить в каком порядке. SQL генерируется на основе фильтров на веб-странице ASP.NET, которая затем создает строку, которую я хочу связать и обработать.
  • 0
    Это похоже на простой подход. В вашем примере столбцы, пришедшие из SQL, расположены в том же порядке, что и столбцы в создаваемой вами таблице. Вы говорите, что можете хотеть их в другом порядке? Как бы вы узнали?
Показать ещё 2 комментария
1

Здесь приведена ссылка на пример динамического создания повторителя во время выполнения. Единственное требование состоит в том, чтобы ASP: Panel была в вашей форме, чтобы вставить ее.

http://programming.top54u.com/post/ASP-Net-Repeater-dynamically-using-C-sharp-code.aspx

  • 0
    Спасибо за ссылку, я посмотрю на этот метод ведения дел.
0

Вы можете использовать GridView, который автоматически создает столбцы на основе источника данных.

  • 0
    Я мог бы, но мне определенно нужен Ретранслятор, поэтому я полностью контролирую презентацию и форматирование вывода.
  • 0
    GridView удивительно настраиваемый - вы уже пробовали?
Показать ещё 5 комментариев
0

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

<% while(myRepeaterWithData.Read()) {
       for (int i = 0; i < myReaderWithData.FieldCount; i++) { %>
           The data on this row in column number <%= i%> is 
           <%= myRepeaterWithData[i] %>.
<%     }
    } %>
  • 0
    Это интересная идея, но в этом случае мне нужно знать имена столбцов, потому что они являются частью заголовков столбцов в таблице.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню