我有一个coldfusion网页,它使用过滤器动态显示cfgrid上的数据。我绑定数据并显示cfc文件中的两个函数。下面是使用绑定方法的主文件中的代码:
<cfform name="postServices" method="post" action="inService02list_v2.cfm?post=1" >
<label>Last Name Search: </label><cfinput type="text" name="filter" id="filter" width="200;" style="border-color:##F60; border-width:medium;" />
<cfgrid name="SelectStuff" format="html" width="785" height="450" selectmode="edit" bind="cfc:_listings.getStudentData({cfgridpage},{cfgridpagesize},{cfgridsortcolumn},{cfgridsortdirection},{filter@keyup})" bindonload="true" onchange="cfc:_listings.editF({cfgridaction},{cfgridrow},{cfgridchanged})">
<cfgridcolumn name="GUID" header="Select" type="boolean"
values="1" display="yes" select="yes">
<cfgridcolumn name="INSERT_ID" header="GUID" width="80" select="no">
<cfgridcolumn name="STU_LAST" header="Last" width="100" select="no">
<cfgridcolumn name="STU_FIRST" header="First" width="80" select="no" >
<cfgridcolumn name="STU_MIDDLE" header="Middle" width="40" select="no" >
<cfgridcolumn name="CAMPUS" header="Campus" width="120" select="no" >
<cfgridcolumn name="GRADE" header="Grade Level" width="100" select="no">
</cfgrid>
</cfform>
以下是cfc文件中的方法:
<cfcomponent>
<!--- Function to display filtered data --->
<cffunction name="editF" access="remote" output="true" returntype="Any">
<cfargument name="gridaction" type="string" required="yes">
<cfargument name="gridrow" type="struct" required="yes">
<cfargument name="gridchanged" type="struct" required="yes">
<!--- Local variables --->
<cfset var value="">
<!--- Process gridaction --->
<cfswitch expression="#ARGUMENTS.gridaction#">
<!--- Process updates --->
<cfcase value="U">
<!--- Get column name and value --->
<cfset colname=StructKeyList(ARGUMENTS.gridchanged)>
<cfset value=ARGUMENTS.gridchanged[colname]>
</cfcase>
</cfswitch>
</cffunction>
<!--- FUNCTION TO FILTER GRID --->
<cffunction name="getstudentdata" access="remote" output="false" returntype="Any">
<cfargument name="page" required="false" default="1" type="Numeric" />
<cfargument name="pagesize" required="false"
default="1000" type="Numeric" />
<cfargument name="sortcolumn" required="false" default="" type="string" />
<cfargument name="sortdir" required="false" default="ASC" type="string" />
<cfargument name="filter" required="false" default="" type="String" />
<cfstoredproc datasource="DESO_DB" procedure="getStudents">
<cfprocparam cfsqltype="cf_sql_varchar" dbvarname="inSchool" value="#SESSION.auth.campus#">
<cfprocresult name="q">
</cfstoredproc>
<cfset queryAddColumn(q, "INSERT_ID", arrayNew(1))>
<cfloop query="q">
<cfset querySetCell(q, "INSERT_ID", #GUID#, currentrow)>
</cfloop>
<cfif Len(#arguments.filter#) GTE 2>
<cfset CapFirst = UCase(left(#arguments.filter#,1)) & Right(#arguments.filter#,Len(#arguments.filter#)-1)>
<cfelse>
<cfset CapFirst = #arguments.filter#>
</cfif>
<cfquery name="q" dbtype="query">
select * from q
where STU_LAST like <cfqueryparam cfsqltype="cf_sql_varchar"
value="%#arguments.filter#%" />
OR
STU_LAST like <cfqueryparam cfsqltype="cf_sql_varchar"
value="%#UCASE(arguments.filter)#%" />
OR
STU_LAST like <cfqueryparam cfsqltype="cf_sql_varchar"
value="%#CapFirst#%" />
OR
STU_LAST like <cfqueryparam cfsqltype="cf_sql_varchar"
value="%#UCASE(CapFirst)#%" />
<cfif len(trim(arguments.sortcolumn))>
order by #arguments.sortcolumn# #arguments.sortdir#
</cfif>
</cfquery>
<cfreturn queryConvertForGrid(q,'1','1000') />
</cffunction>
</cfcomponent>
我遇到的问题是,我无法将这些记录插入存储到数据库中的数组,我收到一条错误消息:“您试图取消引用类java.lang类型的标量变量。字符串作为具有成员的结构。“下面是抛出此错误的代码行:
<cfif #lookForDupsAttRet.RecordCount# EQ 0 AND #ArrayLen(SELECTSTUFF.INSERT_ID)# NEQ 0>
<cfloop array="#SELECTSTUFF.INSERT_ID#" index="i">
<cfif #ArrayLen(SELECTSTUFF.INSERT_ID)# EQ 0>
在添加过滤器之前,您可以选择所需的记录并提交给数据库。 cfgrid使用的是查询而不是具有绑定的数据。也许有人在这里可以帮助指导我如何将这些记录插入到数据库中,同时仍然使用过滤器来查找学生姓氏。
谢谢,