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.

Viewing 4 posts - 1 through 4 (of 4 total)
  • Author
  • cellendedit returns wrong row #70160

    mflach
    Participant

    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?

    cellendedit returns wrong row #70165

    Dimitar
    Participant

    Hello mflach,

    The provided code snippet seems correct. Could you, please, provide us with a complete JSFiddle example demonstrating the issue?

    Best Regards,
    Dimitar

    jQWidgets team
    http://www.jqwidgets.com/

    cellendedit returns wrong row #70201

    mflach
    Participant

    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>
    cellendedit returns wrong row #70206

    mflach
    Participant

    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);
    }
    
Viewing 4 posts - 1 through 4 (of 4 total)

You must be logged in to reply to this topic.