From version 3.2 we can hide and show group of columns at once.
These methods can accept array as argument as single string too. Try to resize the grid to see how
these method works


Hide column Amount and Tax
Show column Amount and Tax

HTML ... <table id="hideshow" class="scroll"></table> <div id="phideshow" class="scroll" style="text-align:center;"></div> <br /> <a href="javascript:void(0)" id="hcg">Hide column Amount and Tax</a><br/> <a href="javascript:void(0)" id="scg">Show column Amount and Tax</a> <script src="hideshow.js" type="text/javascript"> </script> Java Scrpt code ... jQuery("#hideshow").jqGrid({ url:'server.php?q=2', datatype: "json", colNames:['Inv No','Date', 'Client', 'Amount','Tax','Total','Notes'], colModel:[ {name:'id',index:'id', width:55}, {name:'invdate',index:'invdate', width:90}, {name:'name',index:'name asc, invdate', width:100}, {name:'amount',index:'amount', width:80, align:"right"}, {name:'tax',index:'tax', width:80, align:"right"}, {name:'total',index:'total', width:80,align:"right"}, {name:'note',index:'note', width:150, sortable:false} ], rowNum:10, rowList:[10,20,30], imgpath: gridimgpath, pager: jQuery('#phideshow'), sortname: 'id', viewrecords: true, sortorder: "desc", caption:"Dynamic hide/show column groups" }).navGrid("#phideshow",{edit:false,add:false,del:false}); jQuery("#hcg").click( function() { jQuery("#hideshow").hideCol(["amount","tax"]); }); jQuery("#scg").click( function() { jQuery("#hideshow").showCol(["amount","tax"]); }); PHP with MySQL ... $page = $_GET['page']; // get the requested page $limit = $_GET['rows']; // get how many rows we want to have into the grid $sidx = $_GET['sidx']; // get index row - i.e. user click to sort $sord = $_GET['sord']; // get the direction if(!$sidx) $sidx =1; // connect to the database $db = mysql_connect($dbhost, $dbuser, $dbpassword) or die("Connection Error: " . mysql_error()); mysql_select_db($database) or die("Error conecting to db."); $result = mysql_query("SELECT COUNT(*) AS count FROM invheader a, clients b WHERE a.client_id=b.client_id"); $row = mysql_fetch_array($result,MYSQL_ASSOC); $count = $row['count']; if( $count >0 ) { $total_pages = ceil($count/$limit); } else { $total_pages = 0; } if ($page > $total_pages) $page=$total_pages; $start = $limit*$page - $limit; // do not put $limit*($page - 1) $SQL = "SELECT a.id, a.invdate, b.name, a.amount,a.tax,a.total,a.note FROM invheader a, clients b WHERE a.client_id=b.client_id ORDER BY $sidx $sord LIMIT $start , $limit"; $result = mysql_query( $SQL ) or die("Couldn t execute query.".mysql_error()); $responce->page = $page; $responce->total = $total_pages; $responce->records = $count; $i=0; while($row = mysql_fetch_array($result,MYSQL_ASSOC)) { $responce->rows[$i]['id']=$row[id]; $responce->rows[$i]['cell']=array($row[id],$row[invdate],$row[name],$row[amount],$row[tax],$row[total],$row[note]); $i++; } echo json_encode($responce); ...