jqGrid Retain Invalid Cell Value After EditRules Pop Up -


@oleg - new jqgrid.i have 3 issues. urgent required. using jqgrid 3.8, inline edit mode.

  1. i want retain invalid cell values after pop invalid cell.
  2. also want set focus invalid cell.
  3. i have "add row" , filter tool bar feature in jqgrid. have used oleg's solution in creating drop down filter tool bar (posted in jquery thread).

** - problem:

** calling setsearchselect aftersavecell, because want add new values in filter drop down every time add or delete column.(note: column textbox). filter tool bar isn't getting refreshed if use

var sgrid = $("#list")[0]; sgrid.triggertoolbar(); 

see code below setting toolbar.

<script type="text/javascript"> var mydata = [         {id:"1", name:"miroslav klose",     category:"sport",   subcategory:"football"},         {id:"2", name:"michael schumacher", category:"sport",   subcategory:"formula 1"},         {id:"3", name:"albert einstein",    category:"science", subcategory:"physics"},         {id:"4", name:"blaise pascal",      category:"science", subcategory:"mathematics"}     ],     grid = $("#list"),     getuniquenames = function(columnname) {         var texts = grid.jqgrid('getcol',columnname), uniquetexts = [],             textslength = texts.length, text, textsmap = {}, i;         (i=0;i<textslength;i++) {             text = texts[i];             if (text !== undefined && textsmap[text] === undefined) {                 // test whether texts unique place in map.                 textsmap[text] = true;                 uniquetexts.push(text);             }         }         return uniquetexts;     },     buildsearchselect = function(uniquenames) {         var values=":all";         $.each (uniquenames, function() {             values += ";" + + ":" + this;         });              return values;     },     setsearchselect = function(columnname) {             grid.jqgrid('setcolprop', columnname,                     {                         stype: 'select',                         searchoptions: {                             value:buildsearchselect(getuniquenames(columnname)),                             sopt:['eq']                         }                     }         );           };  grid.jqgrid({     data: mydata,     datatype: 'local',     colmodel: [         { name:'name', index:'name', width:200 ,editable:true},         { name:'category', index:'category', width:200,editable:true },         { name:'subcategory', index:'subcategory', width:200,editable:true }     ],     sortname: 'name',     viewrecords: true,     rownumbers: true,     sortorder: "desc",     editurl: "clientarray",     multiselect: true,     pagination:true,     celledit: true,     cellsubmit: 'clientarray',     //ignorecase: true,     pager: '#pager',     height: "auto",     enablesearch: true,     caption: "how use filtertoolbar better locally",      aftersavecell: function(rowid,name,val,irow,icol) {          setsearchselect(name);            jquery("#list").('setcolprop', name,                     {                        width:100                     }         );         var sgrid = $("#list")[0];         sgrid.triggertoolbar(); alert(name);             },     loadcomplete: function () {                     setsearchselect('category');                     } }).jqgrid('navgrid','#pager',           {edit:false, add:false, del:false, search:false, refresh:true});  setsearchselect('category'); setsearchselect('subcategory');  grid.jqgrid('setcolprop', 'name',             {                 searchoptions: {                     sopt:['cn'],                     datainit: function(elem) {                         $(elem).autocomplete({                             source:getuniquenames('name'),                             delay:0,                             minlength:0                         });                     }                 }             });  grid.jqgrid('filtertoolbar',             {stringresult:true, searchonenter:true, defaultsearch:"cn"});   function addrow(tableid){     var looprow = document.getelementbyid("addrowsinput").value;                     var recordcount = '';     var rwdata = '';     //var selrowids = getrowids('list');     var gridproducts =  $("#list");      var resetfirstrow = jquery("#list").getrowdata( 1 );     jquery("#list").setrowdata( 1, resetfirstrow );     if(looprow == null || looprow == "" || looprow == "enter number of units added")     {         looprow = 1;     }          for(i=0; i< looprow; i++)         {                        recordcount = jquery("#list").getgridparam("records") ;                 var emptydata = [                     {id:(recordcount+1), name:"",     category:"",   subcategory:""}]                     gridproducts.jqgrid('addrowdata', recordcount+1, emptydata[0]);                                          }     } </script> 

@oleg - 1 more question on solution suggested. sorry tried myself find couldn't. in buildsearchselect: method , how can include filter empty string. explained above have "add row" button. when user wants filter rows empty columns need filter value.

the implementation of setsearchselect function old answer work if searching toolbar not yet exist. if toolbar exist 1 have modify options of select element or autocomplete source of jquery ui autocomplete widget.

i extended code. can see new version of demo here. in same way 1 use inline editing instead of cell editing.

here modified javascript code:

var mydata = [         {id:"1", name:"miroslav klose",     category:"sport",   subcategory:"football"},         {id:"2", name:"michael schumacher", category:"sport",   subcategory:"formula 1"},         {id:"3", name:"albert einstein",    category:"science", subcategory:"physics"},         {id:"4", name:"blaise pascal",      category:"science", subcategory:"mathematics"}     ],     grid = $("#list"),     getuniquenames = function(columnname) {         var texts = grid.jqgrid('getcol',columnname), uniquetexts = [],             textslength = texts.length, text, textsmap = {}, i;         (i=0;i<textslength;i++) {             text = texts[i];             if (text !== undefined && textsmap[text] === undefined) {                 // test whether texts unique place in map.                 textsmap[text] = true;                 uniquetexts.push(text);             }         }         uniquetexts.sort();         return uniquetexts;     },     buildsearchselect = function(uniquenames) {         var values=":all";         $.each (uniquenames, function() {             values += ";" + + ":" + this;         });         return values;     },     setsearchselect = function(columnname) {         var $select = $('select#gs_'+columnname), un = getuniquenames(columnname),             htmlforselect = '<option value="">all</option>', i, l=un.length, val;         grid.jqgrid('setcolprop', columnname,                     {                         stype: 'select',                         searchoptions: {                             value:buildsearchselect(un),                             sopt:['eq']                         }                     }         );         if ($select.length > 0) {             // searching toolbar exist. 1 have update manually             (i=0;i<l;i++) {                 val = un[i];                 htmlforselect += '<option value="'+val+'">'+val+'</option>';             }             $select.html(htmlforselect);         }     },     setautocomplete = function(columnname) {         var $input = $('input#gs_'+columnname), un = getuniquenames(columnname);         grid.jqgrid('setcolprop', columnname,                     {                         searchoptions: {                             sopt:['cn'],                             datainit: function(elem) {                                 $(elem).autocomplete({                                     source:un,                                     delay:0,                                     minlength:0                                 });                             }                         }                     });         if ($input.length > 0) {             // searching toolbar exist. 1 have update source             $input.autocomplete('option', 'source', un);         }     },     selectcolumns = ['category','subcategory'], autocompletecolumns = ['name'];  grid.jqgrid({     data: mydata,     datatype: 'local',     colmodel: [         { name:'name', index:'name', width:200 ,editable:true},         { name:'category', index:'category', width:200,editable:true },         { name:'subcategory', index:'subcategory', width:200,editable:true }     ],     sortname: 'name',     viewrecords: true,     rownumbers: true,     sortorder: "desc",     celledit: true,     cellsubmit: 'clientarray',     ignorecase: true,     pager: '#pager',     height: "auto",     caption: "how use filtertoolbar better locally including local cell editing",     aftersavecell: function(rowid,name,val,irow,icol) {         if ($.inarray(name,selectcolumns) !== -1) {             setsearchselect(name);         } else if ($.inarray(name,autocompletecolumns) !== -1) {             setautocomplete(name);         }     } }).jqgrid('navgrid','#pager',           {edit:false, add:false, del:false, search:false, refresh:true});  $.each(selectcolumns,function() {     setsearchselect(string(this)); });  $.each(autocompletecolumns,function() {     setautocomplete(string(this)); });  grid.jqgrid('filtertoolbar',             {stringresult:true, searchonenter:true, defaultsearch:"cn"}); 

Comments

Popular posts from this blog

c# - how to write client side events functions for the combobox items -

exception - Python, pyPdf OCR error: pyPdf.utils.PdfReadError: EOF marker not found -