需要建议..动态td tr

时间:2013-06-02 06:20:22

标签: coldfusion

你好我在coldfusion做动态TR和TD,但显然我正在尝试这种屏幕。这是我尝试用colfusion

<cfif variables.newrow EQ true>
   <tr align="center">
  </cfif>
  <cfoutput query="gResults">
  <cfquery datasource="#request.dsn#" name="nextqueries">
        Query
  </cfquery>
    <td height="30" valign="middle"><strong>
    <a href="viewdir.cfm?catID=#val(pic_id)#
<cfif isDefined('url.l') and url.l neq ''>&l=#url.l#</cfif>">
    #pic_cat_name#</a></strong><br>
      <cfloop query="nextqueries">
      <cfquery datasource="#request.dsn#" name="showanother">
        select * from 
        mytable as grlist
      where pic_cid = 
      <cfqueryparam cfsqltype="cf_sql_numeric" value="#Trim(nextqueries.pic_id)">
      </cfquery>
      &raquo;&nbsp;&nbsp;
    <a href="viewdir.cfm?catID=#val(pic_id)#
   <cfif isDefined('url.l') and url.l neq ''>&l=#url.l#</cfif>">#pic_cat_name#
      </a> </cfloop></td>
    <cfif gResults.currentRow MOD 4 EQ 0>
        </tr>
      <cfset variables.newrow = true>
      <cfelse>
      <cfset variables.newrow = false>
    </cfif>
  </cfoutput>

尝试这样做:

http://screencast.com/t/oso4jkhBm3

2 个答案:

答案 0 :(得分:2)

有很多潜在的改进,但这个答案只会处理表格行。你从:

开始
<cfif variables.newrow EQ true>
<tr align="center">
</cfif>

现在我要寻找结束标签。我看到的唯一一个就是:

<cfif gResults.currentRow MOD 4 EQ 0></tr></cfif>

并且该行位于查询循环内。这意味着您可能有多个结束标记,或者您可能没有。你只需要一个。要解决此特定问题,您必须执行此操作:

<cfif variables.newrow EQ true>
<tr align="center">
code to populate this table row
</cfif>

当你解决了那个部分时,我们可以看一下细节的内容。

答案 1 :(得分:1)

要在html表格中从上到下然后从左到右显示数据,就像问题中链接的图像一样,您可以执行与以下内容类似的操作。

<!--- Get query results --->
<cfset arrayOFValues = arraynew(1)>
<cfset queryResults = querynew("Col1,Col2,Col3")>
<!--- Fill query with example data --->
<cfloop from="1" to="25" index="i">
    <cfset queryaddrow(queryResults)>
    <cfset querySetCell(queryResults, "Col1", "Col1 Row " & i)>
    <cfset querySetCell(queryResults, "Col2", "Col1 Row " & i)>
    <cfset querySetCell(queryResults, "Col3", "Col1 Row " & i)>
</cfloop>
<!--- Now have a query named queryResults with 25 rows --->
<!--- Set the number of columns and calculate the number of rows needed --->
<cfset numberOfColumns = 3>
<cfset rowsNeeded = ceiling(queryResults.recordcount / numberOfColumns)>
<cfoutput>
    <table>
        <cfloop from="1" to="#rowsNeeded#" index="curRow">
            <tr>
                <cfloop from="0" to="#numberOfColumns-1#" index="curCol">
                    <td>
                        #queryResults.Col1[(rowsNeeded * curCol) + curRow]#
                    </td>
                </cfloop>
            </tr>
        </cfloop>
    </table>
</cfoutput>

第一部分是创建查询结果。然后,我通过将查询中返回的结果数除以要显示的列数来查找显示记录所需的行数。当结果不是整数时,ceiling是必需的。

我们必须在行中循环每个列记录以获得所需的索引。要查找字段所需的索引,我们必须使用正在显示的行+列的次数是将要显示的行数。

如果您知道列数,可以通过以下方式对其进行硬编码并消除内部循环。

<tr>
    <td>#queryResults.Col1[3 * rowsNeeded]#</td> 
    <td>#queryResults.Col1[3 + 1*rowsNeeded]#</td>
    <td>#queryResults.Col1[3 + 2*rowsNeeded]#</td>
</tr>