Coldfusion 为查询输出设置动态列
Coldfusion set dynamic columns for query output
我正在尝试设置动态查询列 headers 以从查询中获取它们的值。
<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 处理了这个加号和减号。所以唯一不同的是这个月的价值。
我必须实际动态命名列的最接近的东西是这样的,但这只是输出列的名称,这将 return target_MonthPlus0, target_MonthPlus1, targetMonthPlus2 等
但我需要使用该名称来 return 查询中列的实际值。
<cfif i GTE 0>
<cfset monthInLoop = "target_MonthPlus_" & #ABS(i)#>
<td>
<cfoutput>#monthInLoop#</cfoutput>
target_monthMinus18 是一个列名,可能 return 来自 qryGetData 的值 100 我需要在其 td
中显示
target_monthMinus17 是一个列名,可能 return 来自 qryGetData 的值 95 我需要在其 td
中显示
target_monthPlus17 是一个列名,可能 return 来自 qryGetData 的值 205 我需要在其 td
中显示
等等...如您所知,我们总是回到过去 18 个月和未来 18 个月。
我发现了几个与此类似的问题并将其应用于我的代码,但不知何故它们试图做不同的事情,或者我仍然不明白我做错了什么。
在此先感谢您的帮助:)
电脑
我想你可能想多了。您可以使用如下方式直接从查询中访问您的列:
<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(所有列的列表)。您也可以创造性地使用它。
我正在尝试设置动态查询列 headers 以从查询中获取它们的值。
<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 处理了这个加号和减号。所以唯一不同的是这个月的价值。
我必须实际动态命名列的最接近的东西是这样的,但这只是输出列的名称,这将 return target_MonthPlus0, target_MonthPlus1, targetMonthPlus2 等 但我需要使用该名称来 return 查询中列的实际值。
<cfif i GTE 0>
<cfset monthInLoop = "target_MonthPlus_" & #ABS(i)#>
<td>
<cfoutput>#monthInLoop#</cfoutput>
target_monthMinus18 是一个列名,可能 return 来自 qryGetData 的值 100 我需要在其 td
中显示target_monthMinus17 是一个列名,可能 return 来自 qryGetData 的值 95 我需要在其 td
中显示target_monthPlus17 是一个列名,可能 return 来自 qryGetData 的值 205 我需要在其 td
中显示等等...如您所知,我们总是回到过去 18 个月和未来 18 个月。
我发现了几个与此类似的问题并将其应用于我的代码,但不知何故它们试图做不同的事情,或者我仍然不明白我做错了什么。
在此先感谢您的帮助:)
电脑
我想你可能想多了。您可以使用如下方式直接从查询中访问您的列:
<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(所有列的列表)。您也可以创造性地使用它。