|
Mailing Lists
|
Home /
Groups /
ColdFusion Talk (CF-Talk)
cfgrid autosuggest problem
Author: Ray Meade
Short Link: http://www.houseoffusion.com/groups/cf-talk/thread.cfm/threadid:64050#351818
My client's application has a Coldfusion HTML form that contains a Coldfusion
HTML grid which binds to a cfc to retrieve and update the grid's data. My client
would like one of the grids columns to have an autosuggest feature like the other
input fields on the page has. (he wants to be able to start typing and see a list
of things that he's typed in there before) I've found some scripts that will
apply the autosuggest feature to an input field (which doesn't seem necessary
since it's built into the browser anyway) but I can't get it to work from within
the grid. (I tried to simply change the path and field name of the input to the
path and column name of the grid, but that didn't work) I also saw an article
that said you can set a grid column's control type to type="combobox", but when I
try that, it throws up an error stating that "Bind expressions cannot be empty".
(perhaps because it doesn't know where to get the data to populate the drop-down
list from) My client is very adamant about having this feature, so I can't just
tell him that it isn't possible. (he doesn't believe in "it can't be done") Here
is the code for the grid and the cfc that it's bound to, I really hope someone
can help me with this.
Grid code:
<cfgrid name="grdProjectDetails" format="html" width="820" selectMode="edit"
insert="yes" delete="yes" italic="no" bold="no" gridLines="yes" colHeaders="yes"
colHeaderItalic="no" colHeaderBold="yes" enabled="Yes" visible="Yes"
rowheaders="no" bindonload="yes"
bind="cfc:editGrid.fnGetGridDetails({cfgridpage},{cfgridpagesize},{cfgridsortcolumn},{cfgridsortdirection})"
onchange="cfc:editGrid.fnEditGridDetails({cfgridaction},{cfgridrow},{cfgridchanged})">
<cfgridcolumn name="DetailID" display="no">
<cfgridcolumn name="ProjectID" display="no">
<cfgridcolumn name="Quantity" header="Qty." Select="Yes" width="50"
textcolor="##003366" bold="No" dataalign="left" headeralign="center"
headerbold="yes" headertextcolor="##003366">
<cfgridcolumn name="TaskName" header="Description" Select="Yes"
width="600" textcolor="##003366" bold="No" dataalign="left" headeralign="center"
headerbold="yes" headertextcolor="##003366">
<cfgridcolumn name="UnitPrice" header="Unit Price" select="Yes"
width="100" textcolor="##003366" bold="No" dataalign="left" headeralign="center"
headerbold="yes" headertextcolor="##003366">
<cfgridcolumn name="ExtendedPrice" header="Total Cost" select="Yes"
width="100" textcolor="##003366" bold="No" dataalign="left" headeralign="center"
headerbold="yes" headertextcolor="##003366">
</cfgrid>
cfc code (editGrid.cfc):
<cffunction name="fnGetGridDetails" access="remote" returntype="any">
<cfargument name="page" type="numeric" required="no">
<cfargument name="pageSize" type="numeric" required="no">
<cfargument name="gridsortcolumn" type="string" required="no" default="">
<cfargument name="gridsortdir" type="string" required="no" default="">
<cfquery name="qGetGridDetails" datasource="#Application.Datasource#">
SELECT *
FROM tblProjectDetails
WHERE ProjectID=#session.pid#
<cfif ARGUMENTS.gridsortcolumn NEQ "" AND ARGUMENTS.gridsortdir NEQ
"">ORDER BY #ARGUMENTS.gridsortcolumn# #ARGUMENTS.gridsortdir#</cfif>
</cfquery>
<cfreturn QueryConvertForGrid(qGetGridDetails, ARGUMENTS.page,
ARGUMENTS.pageSize)>
</cffunction>
<cffunction name="fnEditGridDetails" access="remote">
<cfargument name="gridaction" type="string" required="yes">
<cfargument name="gridrow" type="struct" required="yes">
<cfargument name="gridchanged" type="struct" required="yes">
<cfset var qAddProjectDetail="">
<cfset var qUpdateProjectDetail="">
<cfset var qDeleteProjectDetail="">
<cfif IsStruct(arguments.gridrow) and IsStruct(arguments.gridchanged)>
<cfif arguments.gridaction is "I">
<cfquery name="qAddProjectDetail" datasource="#Application.Datasource#">
INSERT INTO tblProjectDetails (ProjectID, Quantity, TaskName, UnitPrice,
ExtendedPrice)
VALUES (#session.pid#, #arguments.gridrow.Quantity#,
'#arguments.gridrow.TaskName#', #arguments.gridrow.UnitPrice#,
#arguments.gridrow.Quantity#*#arguments.gridrow.UnitPrice#)
</cfquery>
<cfelseif arguments.gridaction is "U">
<cfset var colname=StructKeyList(arguments.gridchanged)>
<cfset var value=StructFind(arguments.gridchanged, colname)>
<cfquery name="qUpdateProjectDetail"
datasource="#Application.Datasource#">
UPDATE tblProjectDetails
SET #colname#="#value#"
WHERE DetailID=<cfqueryparam cfsqltype="cf_sql_integer"
value="#arguments.gridrow.DetailID#">
</cfquery>
<cfelseif arguments.gridaction is "D">
<cfquery name="qDeleteProjectDetail"
datasource="#Application.Datasource#">
DELETE FROM tblProjectDetails
WHERE DetailID=<cfqueryparam cfsqltype="cf_sql_integer"
value="#arguments.gridrow.DetailID#">
</cfquery>
</cfif>
<cfquery name="qGetExtendedPrice" datasource="#Application.Datasource#">
SELECT *
FROM vTempDetails
WHERE ProjectID=#session.pid#
</cfquery>
<cfloop query="qGetExtendedPrice">
<cfquery name="qUpdateExtendedPrice"
datasource="#Application.Datasource#">
UPDATE tblProjectDetails
SET ExtendedPrice=#qGetExtendedPrice.Quantity#*#qGetExtendedPrice.UnitPrice#
WHERE DetailID=#qGetExtendedPrice.DetailID#
</cfquery>
</cfloop>
</cfif>
</cffunction>
<cffunction name="fnCalculateSubtotal" access="remote" returntype="any">
<cfquery name="qGetSubtotal" datasource="#Application.Datasource#">
SELECT SUM(ExtendedPrice) AS Subtotal
FROM vTempDetails
WHERE ProjectID=#session.pid#
</cfquery>
<cfset Subtotal=#DollarFormat(ValueList(qGetSubtotal.Subtotal))#>
<cfreturn Subtotal>
</cffunction>
<cffunction name="fnChangeTaxable" access="remote">
<cfif session.Taxable IS 1>
<cfset Taxable=0>
<cfelseif session.Taxable IS 0>
<cfset Taxable=1>
</cfif>
<cfquery name="qUpdateTaxable" datasource="#Application.Datasource#">
UPDATE tblProjectDetails
SET Taxable=#Taxable#
</cfquery>
</cffunction>
<cffunction name="fnCalculateTax" access="remote" returntype="any">
<cfquery name="qGetTaxable" datasource="#Application.Datasource#">
SELECT SUM(ExtendedPrice) AS Taxable
FROM vTempDetails
WHERE ProjectID=#session.pid#
</cfquery>
<cfset StartingTotal=#ValueList(qGetTaxable.Taxable)#>
<cfset Tax=#StartingTotal#*#Application.SalesTax#>
<cfif isDefined("session.Taxable") AND session.Taxable IS 1>
<cfset TotalTax=#DollarFormat(Tax)#>
<cfelse>
<cfset TotalTax=#DollarFormat(0)#>
</cfif>
<cfreturn TotalTax>
</cffunction>
<cffunction name="fnCalculateTotal" access="remote" returntype="any">
<cfquery name="qGetTotal" datasource="#Application.Datasource#">
SELECT SUM(ExtendedPrice) AS Total
FROM vTempDetails
WHERE ProjectID=#session.pid#
</cfquery>
<cfset BeginningTotal=#ValueList(qGetTotal.Total)#>
<cfset SalesTax=#BeginningTotal#*#Application.SalesTax#>
<cfif isDefined("session.Taxable") AND session.Taxable IS 1>
<cfset NewTotal=#BeginningTotal#+#SalesTax#>
<cfelse>
<cfset NewTotal=#BeginningTotal#>
</cfif>
<cfset Total=#DollarFormat(NewTotal)#>
<cfreturn Total>
</cffunction>
|
May 25, 2013
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||