Search code examples
ajaxextjscoldfusioncoldfusion-9

cf9 query grid values SQL


I have a grid bound to a cfc, populating an id column and a checkbox (boolean) column. onLoad, i want to get a list of ID values, but only those having checkbox = 1 Here is the working code, with great help from Jan S

<script language="JavaScript">

function init(){
  var grid = ColdFusion.Grid.getGridObject('testgrid'); 
  var gs = grid.getStore();
  var records = gs.getRange();
  var filteredRecords = [];

  for (i = 0; i < records.length; i++) {
  // note: for CF, you MUST capitalize grid header names
  if (records[i].get('SELECT') === 1) {
    var thisID = records[i].get('ID');
    filteredRecords.push(thisID);
      }
    }
  document.getElementById('idList').value=filteredRecords;  
}

ColdFusion.Event.registerOnLoad(init,null,false,true);

</script>

<cfset items=QueryNew("id,Description,Select")> 
<cfset Temp=QueryAddRow(items,1)>
<cfset Temp=QuerySetCell(items,"id","11")>  
<cfset Temp=QuerySetCell(items,"Description","Some item")>  
<cfset Temp=QuerySetCell(items,"Select",1)>  
<cfset Temp=QueryAddRow(items)>
<cfset Temp=QuerySetCell(items,"id","22")>  
<cfset Temp=QuerySetCell(items,"Description","Some other item")>  
<cfset Temp=QuerySetCell(items,"Select",1)>  
<cfset Temp=QueryAddRow(items)>
<cfset Temp=QuerySetCell(items,"id","33")>  
<cfset Temp=QuerySetCell(items,"Description","A third item")>  
<cfset Temp=QuerySetCell(items,"Select",0)> 

<cfform>
<cfgrid name="testgrid" format="html" query="items">
<cfgridcolumn name="id" header="ID" select="no">
<cfgridcolumn name="Description" header="Description" select="no">
<cfgridcolumn name = "Select" header="Select" select="yes" type="boolean">
</cfgrid>
<br>
 <!--- populate this with list of ID's having the checkbox checked, here: 11,22 --->
<input type="text" name="idList" id="idList"> <input type="button" name="getList" value="Get List" onClick="init()">
</cfform>

Basically I need to translate into AJAX this SQL statement:

select stringColumn where booleanColumn = 1 from myGrid

I'm using Cold Fusion 9 which is based on js ext 3.1 i believe


Solution

  • to get an array with all a field from all records where another field is 1:

    isData.on('load', function(store, records){
        // create a new array with all records where the 'booleanColumn' is = 1
        var filteredRecords = [];
        for (i = 0; i < records.length; i++) {
            if (records[i].get('booleanColumn') === 1) {
                filteredRecords.push(records[i]);
            }
        }
        console.log(filteredRecords);
    
        // create a new array of 'stringColumn' values
        var filteredValues = [];
        for (i = 0; i < filteredRecords.length; i++) {
            filteredValues[i] = filteredRecords[i].get('stringColumn');
        }
        console.log(filteredValues);
    
       // proceed with filtered values...
    });