2012-12-27 54 views
1

我是ColdFusion的新手,我正在努力弄清楚如何做一些簡單的功能,我可以在MS Access中輕鬆完成。基於下拉框過濾CFGRID

下面是我想要做的:我想要一個​​基於下拉框過濾其數據。然後根據另一個下拉框進一步篩選數據(如果需要)。

任何幫助將不勝感激。

例子:

<html> 

<!---Grid Source---> 
<cfquery name="getArtists" datasource="cfartgallery"> 
    SELECT A.* 
    FROM ARTISTS A 
    WHERE 
     1=1 
    <cfif structKeyExists(form,'dropdownbox1')> 
     AND STATE like <cfqueryparam value="%#dropdownbox1#%" cfsqltype="CF_SQL_VARCHAR" maxlength="255"> 
     <cfif structKeyExists(form,'dropdownbox2')> 
     AND LASTNAME like <cfqueryparam value="%#dropdownbox2#%" cfsqltype="CF_SQL_VARCHAR" maxlength="255"> 
     </cfif> <!--- DropdownBox 2 ---> 
    </cfif> <!--- DropdownBox 1 ---> 
    ORDER BY A.LASTNAME, A.FIRSTNAME 
</cfquery> 


<head> 
</head> 
<body style="padding:20px;"> 

<cfform> 


<cfformgroup type="horizontal" style="backgroundAlpha:0;font-size:12;color:##000;"> 
    <cfformgroup type="vertical" width="100"> 

<!---Query for STATE---> 
<cfquery name="getState" datasource="cfartgallery"> 
    SELECT A.STATE 
    FROM ARTISTS A 
</cfquery> 

<!---STATE Dropdown---> 
<cfselect name="dropdownbox1" query="getState" queryposition="below" 
    label="State:" value="STATE" display="STATE" 
    required="no" 
    style="backgroundAlpha:0;" width="125"> 
    <option></option> 
</cfselect> 

    </cfformgroup> 
    <cfformgroup type="vertical" width="100"> 

<!---Query for LastName---> 
<cfquery name="getLast" datasource="cfartgallery"> 
    SELECT A.LASTNAME 
    FROM ARTISTS A 
</cfquery> 

<!---LastName Dropdown---> 
<cfselect name="dropdownbox2" query="getLast" queryposition="below" 
    label="Last Name:" value="LASTNAME" display="LASTNAME" 
    required="no" 
    style="backgroundAlpha:0;" width="125"> 
    <option></option> 
</cfselect> 
    </cfformgroup> 
    </cfformgroup> 

    <cfformitem type="spacer" height="20"/> 


<!---Grid---> 
     <cfgrid name="myGrid" query="getArtists" format="html"> 
      <cfgridcolumn name="ARTISTID" header="ARTISTID" width="75" headeralign="center" dataalign="center"/> 
      <cfgridcolumn name="FIRSTNAME" header="FIRSTNAME" width="100" headeralign="center" dataalign="center"/> 
      <cfgridcolumn name="LASTNAME" header="LASTNAME" width="75" headeralign="center" dataalign="center"/> 
      <cfgridcolumn name="ADDRESS" header="ADDRESS" width="100" headeralign="center" dataalign="center"/> 
      <cfgridcolumn name="CITY" header="CITY" width="125" headeralign="center" dataalign="center"/> 
      <cfgridcolumn name="STATE" header="STATE" width="125" headeralign="center" dataalign="center"/> 
      <cfgridcolumn name="POSTALCODE" header="POSTALCODE" headeralign="center" dataalign="center"/> 
      <cfgridcolumn name="EMAIL" header="EMAIL" width="125" headeralign="center" dataalign="center"/> 
      <cfgridcolumn name="PHONE" header="PHONE" headeralign="center" dataalign="center"/> 
      <cfgridcolumn name="FAX" header="FAX" headeralign="center" dataalign="center"/> 
      <cfgridcolumn name="THEPASSWORD" header="THEPASSWORD" headeralign="center" dataalign="center"/> 
     </cfgrid> 

    </cfform> 

</body> 
</html> 

UPDATE

代碼奔Koshy給我的工作就像一個魅力,雖然一個問題,當我改變形式格式=「閃」,它給了我一個錯誤「沒有名稱爲'submit'的方法」。我需要做什麼來解決這個問題?

感謝 約翰尼

+1

最近有一個類似主題的問題。閱讀這個線程,http://stackoverflow.com/questions/14026510/how-would-you-go-about-executing-a-database-query-based-on-the-value-from-a-form。我不確定這些概念是否適用於cfgrid,但值得一試。 –

+0

當選擇過濾器(狀態/名稱)時,您缺少表單提交回原始頁面。 – BKK

+0

還有一個問題,我也可以在鍵入框時將2個下拉列表與過濾器結合使用? @Ben Koshy –

回答

1

大部分爲此所需的工作與CFGRID工作是對被供電電網的CFQUERY側。在這裏,我們只需檢查是否存在下拉框表單域字段名稱,然後根據該條件編寫一些額外的SQL過濾器。

<cfquery name="getPeople" datasource="myDSN"> 
    SELECT 
    column1, column2 
    FROM 
    People 
    WHERE 
    1=1 
    <cfif structKeyExists(form,'dropdownbox1')> 
     AND column1 like <cfqueryparam value="%#dropdownbox1#%" cfsqltype="CF_SQL_VARCHAR" maxlength="255"> 
     <cfif structKeyExists(form,'dropdownbox2')> 
     AND column1 like <cfqueryparam value="%#dropdownbox2#%" cfsqltype="CF_SQL_VARCHAR" maxlength="255"> 
     </cfif> <!--- DropdownBox 2 ---> 
    </cfif> <!--- DropdownBox 1 ---> 
</cfquery> 

<cfgrid ... > 

UPDATE:下面是使用示例代碼的示例。

<html> 
<cfparam name="form.state" default=""> 
<cfparam name="form.lastname" default=""> 

<!---Grid Source---> 
<cfquery name="getArtists" datasource="cfartgallery"> 
    SELECT A.* 
    FROM ARTISTS A 
    WHERE 
     1=1 
    AND STATE like <cfqueryparam value="%#form.state#%" cfsqltype="CF_SQL_VARCHAR" maxlength="255"> 
    AND LASTNAME like <cfqueryparam value="%#form.lastname#%" cfsqltype="CF_SQL_VARCHAR" maxlength="255"> 
    ORDER BY A.LASTNAME, A.FIRSTNAME 
</cfquery> 


<head> 
</head> 
<body style="padding:20px;"> 

<cfform action="index.cfm" method="post"> 


<cfformgroup type="horizontal" style="backgroundAlpha:0;font-size:12;color:##000;"> 
    <cfformgroup type="vertical" width="100"> 

<!---Query for STATE---> 
<cfquery name="getState" datasource="cfartgallery"> 
    SELECT A.STATE 
    FROM ARTISTS A 
    WHERE 
     1=1 
     AND LASTNAME like <cfqueryparam value="%#form.lastname#%" cfsqltype="CF_SQL_VARCHAR" maxlength="255"> 
</cfquery> 

<!---STATE Dropdown---> 
<cfselect name="state" query="getState" queryposition="below" 
    label="State:" 
    value="STATE" 
    display="STATE" 
    required="no" 
    selected="#form.state#" 
    onchange="submit();" 
    style="backgroundAlpha:0;" width="125"> 
    <option></option> 
</cfselect> 


    </cfformgroup> 
    <cfformgroup type="vertical" width="100"> 

<!---Query for LastName---> 
<cfquery name="getLast" datasource="cfartgallery"> 
    SELECT A.LASTNAME 
    FROM ARTISTS A 
    WHERE 
     1=1 
     AND STATE like <cfqueryparam value="%#form.state#%" cfsqltype="CF_SQL_VARCHAR" maxlength="255"> 
</cfquery> 

<!---LastName Dropdown---> 
<cfselect name="lastname" query="getLast" queryposition="below" 
    label="Last Name:" value="LASTNAME" display="LASTNAME" 
    selected="#form.lastname#" 
    required="no" 
    onchange="submit();" 
    style="backgroundAlpha:0;" width="125"> 
    <option></option> 
</cfselect> 

    <a href="index.cfm"><input type="button" value="Reset"></a> 
    </cfformgroup> 
    </cfformgroup> 

    <cfformitem type="spacer" height="20"/> 


<!---Grid---> 
     <cfgrid name="myGrid" query="getArtists" format="html"> 
      <cfgridcolumn name="ARTISTID" header="ARTISTID" width="75" headeralign="center" dataalign="center"/> 
      <cfgridcolumn name="FIRSTNAME" header="FIRSTNAME" width="100" headeralign="center" dataalign="center"/> 
      <cfgridcolumn name="LASTNAME" header="LASTNAME" width="75" headeralign="center" dataalign="center"/> 
      <cfgridcolumn name="ADDRESS" header="ADDRESS" width="100" headeralign="center" dataalign="center"/> 
      <cfgridcolumn name="CITY" header="CITY" width="125" headeralign="center" dataalign="center"/> 
      <cfgridcolumn name="STATE" header="STATE" width="125" headeralign="center" dataalign="center"/> 
      <cfgridcolumn name="POSTALCODE" header="POSTALCODE" headeralign="center" dataalign="center"/> 
      <cfgridcolumn name="EMAIL" header="EMAIL" width="125" headeralign="center" dataalign="center"/> 
      <cfgridcolumn name="PHONE" header="PHONE" headeralign="center" dataalign="center"/> 
      <cfgridcolumn name="FAX" header="FAX" headeralign="center" dataalign="center"/> 
      <cfgridcolumn name="THEPASSWORD" header="THEPASSWORD" headeralign="center" dataalign="center"/> 
     </cfgrid> 

    </cfform> 

</body> 
</html> 
+0

感謝您的快速響應,但我仍然不明白。 @Ben Koshy –

+0

它像一個魅力。非常感謝! @Ben Koshy –