Как создать таблицы с разделами и заголовками в ASP.NET? - PullRequest
3 голосов
/ 03 марта 2009

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

У меня есть две таблицы. Заголовки и предметы.

заголовки имеют формат:

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

ПУНКТЫ имеют формат

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] |
--------------------------------------------------------------------------

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

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

EDIT: Извините, забыл упомянуть, что это должно работать в Windows 2000 / IIS5, поэтому я застрял в ASP.NET 2.0 и не могу использовать функции 3.0 или 3.5.

Ответы [ 5 ]

2 голосов
/ 03 марта 2009

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

1 голос
/ 04 марта 2009

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

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

Для вашего приложения выше, это будет означать, что у Первой и Второй Строки будет colspan 5.

1 голос
/ 04 марта 2009

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

1 голос
/ 03 марта 2009

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

0 голосов
/ 05 марта 2009

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

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

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...