我在CFSCRIPT中执行for循环。我循环查询并通过UDF将字段放入表格单元格(这就是wrapCell()的内容)。
for(i = 1; i lte GetUsers.RecordCount; i++) {
Cells = Cells & wrapCell("#GetUsers.FirstName[i]# #GetUsers.LastName[i]#");
Cells = Cells & wrapCell(lcase(GetUsers.Email[i]));
Cells = Cells & wrapCell(getYesNo(GetUsers.Active[i]));
writeOutput(wrapRow(Cells));
}
每次我需要引用一个字段时我都要写这个:
GetUsers.FirstName[i]
GetUsers.LastName[i]
GetUsers.Email[i]
GetUsers.Active[i]
我很想能够像这样引用这些东西:
FirstName
LastName
Email
Active
有没有办法在输出行之前更改引用,以便占用更少的空间?例如,我可以这样做:
ThisRow = GetUsersStructure.RowInfo[i];
FirstName
LastName
Email
Active
答案 0 :(得分:1)
我不知道任何允许您在使用<cfscript>
时执行此操作的本机方法,但您可以创建另一种便捷方法来执行此操作。例如
public struct function getByRow( query q, numeric index ){
return {
firstname = q.firstname[index],
lastname = q.lastname[index],
email = q.email[index],
active = q.active[index]
};
}
您甚至可以进一步采取措施,让方法循环遍历q.columnlist
,使其成为通用的重用方法。
答案 1 :(得分:1)
你可以。它会增加开销。
将行或整个查询转换为结构。 http://www.bennadel.com/blog/149-Ask-Ben-Converting-A-Query-To-A-Struct.htm
然后将结果抛出到本地范围。
StructAppend( local , QueryToStruct( GetUsers, i ) );
如果您使用的是CF9 / railo,则只需按列名访问它们即可。 (我没有测试过这个。)