Coldfusion为查询输出设置动态列

时间:2016-10-18 17:06:14

标签: dynamic coldfusion coldfusion-9 cfoutput

我正在尝试设置动态查询列标题以从查询中获取它们的值。

<cfoutput query="qryGetData">

        <cfloop from="-18" to="18" index="i">
        <cfif i GTE 0>
            <cfset variables["target_MonthPlus_#abs(i)#"] = "Testing" />

            <td>
                <cfoutput>#variables["target_MonthPlus_#abs(i)#"]#</cfoutput>
             </td>     
         <cfelse>
            <cfset variables["target_MonthMinus_#abs(i)#"] = "Testing" />



            <td>
            <cfoutput>#variables["target_MonthMinus_#abs(i)#"]#</cfoutput>
             </td>     

         </cfif>  

        </cfloop>

代码我没有真正起作用,我从另一个答案中找到了它,我已经尝试了所有我能想到的并尝试使用EVALUATE(),即使我知道我不应该使用它。

所以基本上我的查询有37个月的字段从target_MonthMinus18开始到target_MonthMinus1。然后target_MonthPlus0到target_MonthPlus18。正如您在上面所看到的,我已经使用CFIF来处理加号和减号。所以唯一不同的是月份的价值。

我必须动态地命名列的最近的东西是这样的,但这只是输出列的名称,它将返回target_MonthPlus0,target_MonthPlus1,targetMonthPlus2等。 但是我需要使用该名称来从查询中返回列的实际值。

 <cfif i GTE 0>
            <cfset monthInLoop = "target_MonthPlus_" & #ABS(i)#>

            <td>
                <cfoutput>#monthInLoop#</cfoutput>

target_monthMinus18是一个列名,可以从qryGetData返回值100,我需要在其td中显示

target_monthMinus17是一个列名,可以从qryGetData返回值95,我需要在其td中显示

target_monthPlus17是一个列名,可以从qryGetData返回值205,我需要在其td中显示

等等......我们总是可以追溯过去18个月和未来18个月。正如您所知道的那样。

我发现了几个与此类似的问题,并且已经应用​​于我的代码但不知何故他们正在尝试做不同的事情,或者我仍然不明白我做错了什么。

先谢谢你的帮助:)

PC

1 个答案:

答案 0 :(得分:3)

我想你可能在想这个。您可以使用以下内容直接从查询中访问列:

<cfloop query="qryGetData">

      <cfloop from="-18" to="18" index="i">
        <cfif i GTE 0>
            <td>
                <cfoutput>#qryGetData["target_MonthPlus_" & abs(i)][currentrow]#</cfoutput>
             </td>     
         <cfelse>
              <td>
            <cfoutput>#qryGetData["target_MonthMinus_" & abs(i)][currentrow]#</cfoutput>
             </td>     

         </cfif> 
    </cfloop>
</cfloop>

这利用了CF的查询数组语法。请记住,您还可以使用qryGetData.columnlist(所有列的列表)。您也许也可以创造性地使用它。