Render_sql for formconnector?

Does FormConnector implement complex sql or even the beforeRender event???

Yep, all connectors support all documented events and API methods.

so i can use SQL joins and subqueries to load data on a form??

Yep, you can use any valid SQL to get the data.
Beware that while any SQL can be used for data loading, connector will not be able to generate update commands correctly for complex SQL

docs.dhtmlx.com/doku.php?id=dhtm … ral_tables

session_start();
require("../config.php");
require("./connector/db_mysqli.php");
require("./connector/grid_connector.php");
	
$dbc= new mysqli(DB_SERVER ,DB_USER,DB_PASS, DB_NAME);

if($dbc){
     
	
	 

			$grid = new GridConnector($dbc, "MySQLi");		
			$grid->dynamic_loading(100);
				
				//$config = new GridConfiguration();
		 
				//$config->setHeader("&nbsp","First Name","Last Name","Email Address","Department","Privileges On","#cspan","Account Activation");
				//$config->attachHeader("#rspan","#text_filter","#text_filter","#text_filter","","Employees","Payrolls","");
				//$config->attachFooter("Item Name,Item CD", Array("background: #ff0000;", "background: #00ff00;"));
				//$config->setInitWidths("30,150,150,*,150,100,100,100");
				//$config->setColSorting('na,str,str,str,str,str,str,str');
				//$config->setColColor("#CCE2FE");
				//$config->setColHidden("false,false");
				//$config->setColTypes("cntr,ro,ro,ro,ro,coro,coro,coro");
				//$config->setColAlign('right,left,left,left,left,center,center,left');
				
				
			
			
			//$grid->set_config($config);
			 
			 /*CRUD*/
			$grid->event->attach("beforeUpdate","update");
		    //$grid->event->attach("beforeIsert", insert);
			//$grid->event->attach("beforeDelete",delete);
			
			//$grid->event->attach("beforeProcessing", function validate($data){
            // if ($data->get_value("some")=="")
             //     $data->invalid();
			// });
               
			
			//$grid->event->attach("beforeRender",set_userData);
			//$grid->enable_log("./errors.txt");
			
			$loadSQL  = "SELECT * FROM department  INNER JOIN admin_priv USING(departmentid)  INNER JOIN login USING(loginid) WHERE login.level='A' ORDER BY fname ASC";
		
			$grid->set_options("employee_priv",array("n" => "No Privileges","e"=>"Edit Only", "c"=>"Create & Edit","a" => "Full Access"));
			$grid->set_options("payroll_priv",array("n" => "No Privileges","e"=>"Edit Only", "c"=>"Create & Edit","a" => "Full Access"));
			$grid->set_options("active",array("Activated" => "Active","Deactivated"=>"Inactive"));
			$grid->render_sql($loadSQL,"loginid",",fname,lname,email,national_id,department_name,employee_priv,payroll_priv,active","department_name,level,password");
			
		 
		   
		   
			    function set_userData($row){				
				         $row->set_userdata("password",$row->get_value("password"));
			      }
				
				
				/*
				function update_me($data){
				   $fname        = trim(strval($data->get_value('fname')));
				   $lname        = trim(strval($data->get_value('lname')));
				   $email        = trim(strval($data->get_value('email')));
				   $nationalID   = trim(strval($data->get_value('national_id')));
				   $departmentID = trim(intval($data->get_value('departmentid')));
				   $nationalID   = trim(intval($data->get_value('national_id')));
				   $emp_priv     = trim(strval($data->get_value('employee_priv')));$active
				  // $pay_priv     = trim(strval($data->get_value('payroll_priv')));
				  // $active       = trim(strval($data->get_value('active')));
				   //$password     = trim(strval($data->get_value('password')));
				   //if(!isset($fname)||!isset($lname)||!isset($email)||!isset($nationalID)||!isset($departmentID)||!isset($nationalID)||!isset($emp_priv)||!isset($active)||!isset($pay_priv))$data->invalid();
				   
				   //$updateadmin_priv ="UPDATE admin_priv SET fname='$fname',lname='$lname',national_id='$nationalID',departmentid='$departmentID',employee_priv='$emp_priv',payroll_priv='$pay_priv' WHERE loginid='{$data->get_id()}' LIMIT 1";
				   
				  // $adminset   = "UPDATE login SET email='$email,password= sha1('$password'),active='$active' WHERE loginid='{$data->get_id()}' LIMIT 1";
				   //$loginset = @mysqli_query ($dbc, $updateLogin);
					   if (mysqli_affected_rows($dbc) == 1) { 
						  $loginset = @mysqli_query ($dbc, $updateLogin);
						      if (mysqli_affected_rows($dbc) == 1)					  
							         $data->success();
						      else $data->invalid();  
					   }
					   else $data->invalid();
				   
			   }//END update
			   
			   */
			   
			   //UPDATE existing records
			   
			   function update_me($data){
			       $fname        = $data->get_value('fname');
				   $lname        = $data->get_value('lname');
				   $email        = $data->get_value('email');
				   $nationalID   = $data->get_value('national_id');
				   $departmentID = $data->get_value('departmentid');
				   $nationalID   = $data->get_value('national_id');
				   $emp_priv     = $data->get_value('employee_priv');
				   $pay_priv     = $data->get_value('payroll_priv');
				   $active       = $data->get_value('active');
				   $password     = $data->get_value('password');
				   
					 $updateadmin_priv  ="UPDATE admin_priv SET ";
					 $updateadmin_priv .= isset($fname)?" fname='$fname',"."" :" ";
					 $updateadmin_priv .= isset($lname)? "lname='$lname',"."": " ";
					 $updateadmin_priv .= isset($nationalID)? "national_id='$nationalID',"."": " ";
					 $updateadmin_priv .= isset($departmentID)? "departmentid='$departmentID',"."": " ";
					 $updateadmin_priv .= isset($emp_priv)? "employee_priv='$emp_priv',"."": " ";
					 $updateadmin_priv .= isset($pay_priv)? "payroll_priv='$pay_priv',"."": " ";
					 //$updateadmin_priv .= isset($data->get_id()? "WHERE loginid='{$data->get_id()}' LIMIT 1" :"";
					 
					 $updateadmin_priv = trim($updateadmin_priv);
					 
					 $grid->sql->query($updateadmin_priv);
											   
			   }//END update
			   
			   
			   function update($data){
			       $grid->sql->query("UPDATE admin_priv SET fname='{$data->get_value('fname')}',$lname='{$data->get_value('lname')}',departmentid='{$data->get_value('departmentid')}',national_id='{$data->get_value('national_id')}',employee_priv='{$data->get_value('employee_priv')}',payroll_priv='{$data->get_value('payroll_priv')}' WHERE loginid='{$data->get_id()}' LIMIT 1");
				   
				   $grid->sql->query("UPDATE login SET email='{$data->get_value('email')}',password=sha1('{$data->get_value('password')}'),active='{$data->get_value('active')}' WHERE loginid='{$data->get_id()}'");
				$_SESSION =$data;				   
			   }//END delete
			   
			   
			   //INSERT new records
			   function insert($data){
			   
			   }//END isert()
			   
			   //DELETE existing records
			   function delete($data){
			   			   
			   }//END delete
			   
	     
}//END if($dbc)

?>

Please help me with the custom update for complex sql

Try to move custom functions BEFORE the code which attaches them as event handlers.

thank you…i have another issue,form items of type select (options) are not sending data to the GridConnector when i bind the form as shown[code]
//JS CODE
var str = [
{ type:“block” , name:“block_one”, offsetLeft:“30”, list:[

	{ type:"select" , name:"departmentid", label:"Department", validate:"ValidInteger", inputWidth:143, required:true, offsetTop:"10", position:"label-top",connector:"./../php/servers.php?options=true&department=2" },
	{ type:"select" , name:"acctive", label:"Account Activation", labelWidth:170, inputWidth:143, required:true, offsetTop:"15", position:"label-top", options:[
				{ value:"Activated", text:"Account Activated" },
	                       { value:"Deactivated", text:"Deactivate Account" }
		        ] },
	{ type:"label" , name:"lab2", label:"Account Access Rights"  },
	{ type:"select" , name:"payroll_priv", label:"Privileges On Payrolls", validate:"ValidAplhaNumeric", labelWidth:170, inputWidth:143, required:true, offsetTop:"10", position:"label-top", options:[
	{ value:"n", text:"No Privileges" },
	{ value:"e", text:"Edit Only" },
	{ value:"c", text:"Create & Edit" },
	{ value:"a", text:"Full Control" }
		] },
	{ type:"select" , name:"employee_priv", label:"Privileges On Employees", validate:"ValidAplhaNumeric", labelWidth:170, inputWidth:143, required:true, offsetTop:"10", position:"label-top", options:[
	{ value:"n", text:"No Privileges" },
	{ value:"e", text:"Edit Only" },
	{ value:"c", text:"Create & Edit" },
	{ value:"a", text:"Full Control" }
		] }
	]  }
];


   var admins_form = admins_form_cell.attachForm(str);
          admins_form.enableLiveValidation(true);
	admins_form.attachEvent("onValidateError", function (input, value, result){
       
	       dhtmlx.message({type:"error", text:admins_form.getItemLabel(input).replace(/\*+/g,'')+" is missing!"});							
     });
    admins_form.bind(admins_grid);

[/code]

#
#PHP CODE
#
<?php
session_start();
require("../config.php");
require("./connector/db_mysqli.php");
require("./connector/grid_connector.php");
	
$dbc= new mysqli(DB_SERVER ,DB_USER,DB_PASS, DB_NAME);

function  update($data){
				   $departmentID = trim(intval($data->get_value('departmentid')));
				
				   $emp_priv     = trim(strval($data->get_value('employee_priv')));
				   $pay_priv     = trim(strval($data->get_value('payroll_priv')));
				   $active       = trim(strval($data->get_value('active')));
			
				   $lid          = $data->get_id();
			     
				 global $grid;
			     
				 $grid->sql->query("UPDATE admin_priv SET   departmentid=".$departmentID.",employee_priv='".$emp_priv."',payroll_priv='".$pay_priv."' WHERE  loginid=".$lid." LIMIT 1");
                     $grid->sql->query("UPDATE login SET email='".$email."',password=SHA1('".$password."'),active='".$active."' WHERE loginid=".$lid." LIMIT 1");   
			    
				  $data->success();
			}//END update

/*CRUD processing triggers*/
			$grid->event->attach("beforeUpdate",   "update");
   $grid->enable_log("./admins_grid.txt",true);
			
			$loadSQL  = "SELECT * FROM department  INNER JOIN admin_priv USING(departmentid)  INNER JOIN login USING(loginid) WHERE login.level='A' ";
			$grid->render_sql($loadSQL,"loginid",",fname,lname,email,national_id,department_name,employee_priv,payroll_priv,active","password,level,departmentid,loginid");


PS: I have dhtmlxprocessor.js and the debug.js included,  this code has been shortened for other updates which are working

viewtopic.php?f=19&t=28747