双重评估 - 如何根据包含列名的变量访问我的查询列?

时间:2011-01-26 10:40:19

标签: dynamic coldfusion evaluate

我有一个查询和一个字段/列名称列表。我想做一个双循环 - 遍历查询中的每个记录,然后循环遍历字段/列名称列表并输出每个相应的字段。循环应该是这样的:

<table>
    <cfoutput query="myQuery">
        <tr>
            <cfloop list="#cols#" index="col">
                <td>?</td>
            </cfloop>
        </tr>
    </cfoutput>
</table>

问题是在问号所在的位置...我已经尝试了#myquery[col]#,但这不起作用。我需要在变量col中获取由字符串名称指示的变量......显然,#col#将只返回列名。我需要找出一些方法来对字符串进行双重评估...类似于##col##,这当然也无法正常工作。我怎么能做到这一点?

3 个答案:

答案 0 :(得分:7)

当引用列名作为结构时,您还需要告诉查询要获取哪一行。如果没有通过myQuery.ColumnList获取cols变量,还应确保检查列名是否存在。

使用以下代码动态引用循环中的每一列:

<table>
    <cfoutput query="myQuery">
        <tr>
            <cfloop list="#cols#" index="col">
                <td>#myQuery[col][CurrentRow]#</td>
            </cfloop>
        </tr>
    </cfoutput>
</table>

答案 1 :(得分:-1)

您仍然可以将Sergii的方法与您自己的列表一起使用:

<cfloop list="#cols#" index="col">
   <cfif StructKeyExists(myQuery, col)>
      <td>#col# = #myQuery[col][myQuery.CurrentRow]#</td>
   </cfif>
</cfloop>

答案 2 :(得分:-2)

得到了!! :)

#evaluate(evaluate("col"))#