Динамический разброс строк в таблице Coldfusion

#oracle #coldfusion #coldfusion-9

#Oracle #coldfusion #coldfusion-9

Вопрос:

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

Теперь, как часть статистики, я пытаюсь отобразить атрибуты в HTML-таблице. У меня есть запрос, который содержит подробную информацию о «Названии региона», «Идентификаторе пользователя», «Имени отчета», «Количестве доступа», «Дате просмотра» и т.д. Требование заключается в том, чтобы охватывать «Название региона» по всем его строкам.

Например, 10 разных пользователей из региона Мельбурн имеют доступ к отчету XYZ. В моей таблице должен быть Melbourne с rowspan = «10» и в каждой строке должны быть сведения о каждом пользователе. Я не хочу, чтобы Мельбурн повторялся в таблице 10 раз.

Я пытался использовать <cfoutput group="RegionName" тег вместе с таблицей HTML, но таблица не правильно сформирована.

Как я могу этого добиться?

Ответ №1:

Вы должны быть в состоянии достичь этого, и вы были в правильном направлении, посмотрев на атрибут groupby (на самом деле атрибут является group="" ). Хотя cfml будет выглядеть не очень красиво (я предпочитаю cfscript и, вероятно, сделал бы следующее с несколькими функциями). Что-то вроде следующего должно отображать правильно сформированную таблицу с ячейкой RegionName, охватывающей несколько строк, правильно сформированным образом, просто настройте классы / форматирование и т.д. По своему усмотрению!

 <!---
    Make sure that myQuery is ordered by
    RegionName ASC before anything else to
    ensure the group by works as intended
--->
<table>
    <thead>
        <tr>
            <th>Region</th>
            <th>User</th>
        </tr>
    </thead>
    <tbody>
        <cfoutput query="myQuery" group="RegionName">
            <!--- set up an array to hold the users for this region --->
            <cfset arrOfUsers = ArrayNew(1)>
            <cfoutput>
                <cfset ArrayAppend(arrOfUsers,'<td>'amp;myQuery.UserNameamp;'</td>)>
            </cfoutput>
            <!--- render time, use the array just generated so we know how many users are in this group --->
            <cfloop from="1" to="#ArrayLen(arrOfUsers)#" index="i">
                <tr>
                    <cfif i EQ 1>
                        <td rowspan="#ArrayLen(arrOfUsers)#">#myQuery.RegionName#</td>
                    </cfif>
                    #arrOfUsers[i]#
                </tr>
            </cfloop>
        </cfoutput>
    </tbody>
</table>
  

Комментарии:

1. Потрясающе, именно то, что я хотел. Большое спасибо, @simon.