jQuery UI Widgets › Forums › Grid › cellendedit returns wrong row
This topic contains 3 replies, has 2 voices, and was last updated by mflach 9 years, 9 months ago.
-
Author
-
I’m using cellendedit to update row contents but if I filter the data, I get the wrong row data in event.args. This is what I’m doing:
var args = event.args;
var rowid = $(‘#jqxgrid’).jqxGrid(‘getrowid’, args.rowindex);
var data = $(‘#jqxgrid’).jqxGrid(‘getrowdatabyid’, rowid);If I don’t filter the rows, I get the correct data.
If I filter the rows I get the data for the unfiltered index.
Thoughts?
Hello mflach,
The provided code snippet seems correct. Could you, please, provide us with a complete JSFiddle example demonstrating the issue?
Best Regards,
DimitarjQWidgets team
http://www.jqwidgets.com/I’m not familiar enough with JSFiddle to quickly produce an example. The code below is a modified version of your Grid Filtering demo with ability to edit a row. If you click on a checkbox it will display the name associated with the row. Try it unfiltered and then filtered. You will get different results. I forgot to mention in my original post that this problem is directly related to checkbox columns as they don’t populate the args the same as other columns.
<!DOCTYPE html> <html lang="en"> <head> <title id='Description'>This example illustrates the Grid filtering feature. Enter some data into the Filter Row.</title> <link rel="stylesheet" href="jqwidgets/jqwidgets/styles/jqx.base.css" type="text/css" /> <script type="text/javascript" src="jquery-1.11.1.min.js"></script> <script type="text/javascript" src="jqwidgets/jqwidgets/jqxcore.js"></script> <script type="text/javascript" src="jqwidgets/jqwidgets/jqxdata.js"></script> <script type="text/javascript" src="jqwidgets/jqwidgets/jqxbuttons.js"></script> <script type="text/javascript" src="jqwidgets/jqwidgets/jqxscrollbar.js"></script> <script type="text/javascript" src="jqwidgets/jqwidgets/jqxlistbox.js"></script> <script type="text/javascript" src="jqwidgets/jqwidgets/jqxdropdownlist.js"></script> <script type="text/javascript" src="jqwidgets/jqwidgets/jqxmenu.js"></script> <script type="text/javascript" src="jqwidgets/jqwidgets/jqxgrid.js"></script> <script type="text/javascript" src="jqwidgets/jqwidgets/jqxgrid.edit.js"></script> <script type="text/javascript" src="jqwidgets/jqwidgets/jqxgrid.filter.js"></script> <script type="text/javascript" src="jqwidgets/jqwidgets/jqxgrid.sort.js"></script> <script type="text/javascript" src="jqwidgets/jqwidgets/jqxgrid.selection.js"></script> <script type="text/javascript" src="jqwidgets/jqwidgets/jqxpanel.js"></script> <script type="text/javascript" src="jqwidgets/jqwidgets/jqxcalendar.js"></script> <script type="text/javascript" src="jqwidgets/jqwidgets/jqxdatetimeinput.js"></script> <script type="text/javascript" src="jqwidgets/jqwidgets/jqxcheckbox.js"></script> <script type="text/javascript" src="jqwidgets/jqwidgets/globalization/globalize.js"></script> <script type="text/javascript" src="jqwidgets/scripts/demos.js"></script> <script type="text/javascript" src="jqwidgets/demos/jqxgrid/generatedata.js"></script> <script type="text/javascript"> $(document).ready(function () { var data = generatedata(500); var source = { localdata: data, datafields: [ { name: 'name', type: 'string' }, { name: 'productname', type: 'string' }, { name: 'available', type: 'bool' }, { name: 'date', type: 'date'}, { name: 'quantity', type: 'number' } ], datatype: "array" }; var dataAdapter = new $.jqx.dataAdapter(source); $("#jqxgrid").jqxGrid( { width: 850, source: dataAdapter, showfilterrow: true, filterable: true, editable: true, selectionmode: 'multiplecellsextended', columns: [ { text: 'Name', columntype: 'textbox', filtertype: 'input', datafield: 'name', width: 215 }, { text: 'Product', filtertype: 'checkedlist', datafield: 'productname', width: 220 }, { text: 'Available', datafield: 'available', columntype: 'checkbox', filtertype: 'bool', width: 67 }, { text: 'Ship Date', datafield: 'date', filtertype: 'range', width: 210, cellsalign: 'right', cellsformat: 'd' }, { text: 'Qty.', datafield: 'quantity', filtertype: 'number', cellsalign: 'right' } ] }); $('#clearfilteringbutton').jqxButton({ height: 25}); $('#clearfilteringbutton').click(function () { $("#jqxgrid").jqxGrid('clearfilters'); }); $("#jqxgrid").on('cellendedit', function (event) { var args = event.args; $cellValue = args.value; if(args.columntype == 'checkbox') { var rowid = $('#jqxgrid').jqxGrid('getrowid', args.rowindex); var data = $('#jqxgrid').jqxGrid('getrowdatabyid', rowid); alert (data.name); } }); }); </script> </head> <body class='default'> <div id="jqxgrid"> </div> <input style="margin-top: 10px;" value="Remove Filter" id="clearfilteringbutton" type="button" /> </body> </html>
Mystery solved…
Since I’m updating the filtered column, the data is filtered out BEFORE the cellendedit is triggered. Therefore the row is no longer there and I get the row below the intended row. I had to change it to use cellbeginedit and inverse the args.value of the checkbox to get the correct value since the value has not changed yet in cellbeginedit.
if(args.columntype == 'checkbox') { $cellValue = !args.value; //Inverse to get the correct value var rowid = $('#jqxgrid').jqxGrid('getrowid', args.rowindex); var data = $('#jqxgrid').jqxGrid('getrowdatabyid', rowid); }
-
AuthorPosts
You must be logged in to reply to this topic.