Как создать таблицы с разделами и заголовками в ASP.NET?

StackOverflow https://stackoverflow.com/questions/607980

Вопрос

У меня есть некоторые данные, которые необходимо представить в виде таблицы с несколькими разделами.В частности, каждый раздел данных разбит (со своими заголовками) по дням.По сути, это разовая одностраничная сделка, и она не будет поддерживаться, поэтому я не хочу вкладывать много усилий в архитектуру.

У меня есть две таблицы.ЗАГОЛОВКИ и ПУНКТЫ.

ЗАГОЛОВКИ имеют формат:

date(datetime), type(tinyint), firstline(varchar), secondline(varchar)

ITEMS имеет формат

id(int), date(datetime), type(tinyint), name(varchar), value1(int), 
    value2(int), value3(int)

Мне нужно, чтобы данные выглядели примерно так (первая и вторая строки заполнены данными, третья строка — статическим текстом, строки элементов — заполнены данными):

1/1/2009
--------------------------------------------------------------------------
|                              [First line]                              |
--------------------------------------------------------------------------
|                             [Second line]                              |
--------------------------------------------------------------------------
|  Date |       Name            |   Value 1    |   Value 2   |  Value 3  |
==========================================================================
| [Date]|      [Name]           |  [Value 1]   |  [Value 2]  | [Value 3] |
--------------------------------------------------------------------------
| [Date]|      [Name]           |  [Value 1]   |  [Value 2]  | [Value 3] |
--------------------------------------------------------------------------
1/2/2009
--------------------------------------------------------------------------
|                              [First line]                              |
--------------------------------------------------------------------------
|                             [Second line]                              |
--------------------------------------------------------------------------
|  Date |       Name            |   Value 1    |   Value 2   |  Value 3  |
==========================================================================
| [Date]|      [Name]           |  [Value 1]   |  [Value 2]  | [Value 3] |
--------------------------------------------------------------------------
| [Date]|      [Name]           |  [Value 1]   |  [Value 2]  | [Value 3] |
--------------------------------------------------------------------------

Это будет повторяться для всех дней, которые сейчас находятся в базе данных, причем каждый день имеет свою таблицу со своими заголовками.Они также будут отфильтрованы по типу.на странице будут отображаться только заголовки и элементы указанного типа.Тип — tinyint.

Итак, вопрос в том, какие элементы ASP.NET лучше всего использовать?Список данных?Вид сетки?И как мне включить данные из двух таблиц в формате заголовка/элемента?

РЕДАКТИРОВАТЬ:Извините, забыл упомянуть, что это должно работать в Windows 2000/IIS5, поэтому я застрял на ASP.NET 2.0 и не могу использовать функции 3.0 или 3.5.

Это было полезно?

Решение 5

Хорошо, вот окончательное решение, которое я придумал.Я уверен, что это не самый эффективный и не самый быстрый способ, но мне просто нужно было это сделать и заняться чем-то другим.

Моим первым шагом было создание базового класса, который я назвал RowBase. Это был абстрактный класс, реализовавший абстрактный метод GetRow();Затем я получил два других класса — BannerRow и ItemRow от RowBase.Эти классы содержат поля со всеми данными, используемыми в моих таблицах.

Затем я создал две таблицы DataTable и заполнил их результатами двух моих запросов через DataAdapter.

Затем я создал List<RowBase> и взаимодействовал с таблицами данных, создавая либо BannerRow, либо ItemRow в зависимости от типа строки.

Затем я запустил List<RowBase>.Sort, сортируя по дате и типу строки, чтобы убедиться, что BannerRows имеет приоритет над ItemRows.

Наконец, я создал таблицу, поместил ее в свою веб-форму, установил для нее значение runat="server" с id="maintable", а затем перебрал свой List<RowBase> и вызвал GetRow для каждой RowBase.

BannerRow и ItemRow имели переопределение GetRow(), которое возвращало HtmlTableRow, отформатированный для включения данных в правильном формате.Затем я использовал некоторую условную логику для вставки строк заголовков для данных ItemRow, и все получилось.

Это вариация идеи Роба и Бена, но она включала в себя гораздо больше обработки данных, поэтому я проголосовал за них обоих, но считаю себя ответственным за ответ.

Другие советы

Посмотрите asp:table.Вы можете программно добавлять строки и столбцы в некоторых вложенных условных итерациях кода.

Я бы рекомендовал вернуть данные в формате XML, а затем использовать XSLT для построения отчета.В противном случае вам придется использовать вложенные GridViews или повторители.

Если шаблон выполняется каждый раз с одинаковым количеством строк и т. д.Репитер может оказаться лучшим выбором, поскольку он даст вам максимальный контроль над тем, как макет будет выглядеть на экране.

Разместите <asp:Table> на странице и создайте его из кода.

Используйте параметр colspan для столбцов (ячейок), поскольку это позволяет создавать записи, охватывающие множество столбцов для нужных строк.

Для вашего приложения выше это будет означать, что First Line и Second Line будут иметь colspan, равный 5.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top