views:

24

answers:

1

I'm guessing afterInsertRow is the method to use, and I've already got extra data for each row (read/unread), with the key "readStatus".

What I do no want is to be transversing the DOM after grid has completed to add a css class to row based on some cell value.

Any suggestions?

Add-on:

If this is the cell data:

{"cell":["blah blah blah"],"id":"123456789","readstatus":"unread"}

How do I get to the 'readstatus' part?

+1  A: 

The usage of the function afterInsertRow is not the best way especially if you use gridview:true jqGrid option which is almost always recommended. Look at the old answer which do mostly what you need. The schema of the code could be about following

var grid = $('#list'),
    gridNode = grid[0];

grid.jqGrid({
    //...
    loadComplete: function() {
        var ids = grid.jqGrid('getDataIDs');
        for (var i = 0, l = ids.length; i < l; i++) {
            var rowid = ids[i];
            // get data from some column 'readStatus'
            var status = grid.jqGrid('getCell',rowid,'readStatus');
            // or get data from some 
            //var rowData = grid.jqGrid('getRowData',rowid);

            // now you can set css on the row with some
            if (status === 'error') {
                $('#' + rowid, gridNode).addClass('myErrorClass');
            }
        }
    }
});

It looks like "transversing the DOM after grid has completed", but it works quickly as the usage of afterInsertRow.

Oleg
So the bottom line is that the data still need to be in the 'cell-level' rather than 'row-level'? Because I wanted to remove the column for read status altogether... but I can slot that info in some other column I guess... not ideal.
Brandon
@Brandon: Then look at http://stackoverflow.com/questions/3025305/jqgrid-firefox-and-css-text-decoration-problem/3026421#3026421
Oleg
@Brandon: under removing of the column you mean make it hidden?
Oleg
no... i mean remove it altogether... hidden will still require some hacks (colspan ++) to work in all browsers.
Brandon
@Brandon: then you should clear the place where you want to get the information. Unter hidden I mean `hidden:true` in the colModel (see http://www.trirand.com/jqgridwiki/doku.php?id=wiki:colmodel_options).
Oleg
Added example of cell structure in question.. maybe that will help.
Brandon
@Oleg yes, I know what you mean by hidden. I already have 2 hidden columns based on data logic, I will still need to use Javascript to adjust the colspan of other columns to make sure it table expands to 100% to compensate the hidden columns. (Not sure which browser, but probably 1 of the IEs not working perfectly for hidden TDs)
Brandon
I'm trying to steer away from hiding columns altogether.
Brandon
@Brandon: Then you should declare the `loadComplete` as `loadComplete: function(data)`. As the `data` parameter you will have the data exactly in the form how you as received from the server. You should enumerate the data: `var myRows=data.rows; for (var i=0, l=myRows.length; i<l; i++) { var myrowData = data[i]; // now myrowData has not only myrowData.id and myrowData.cells, but also myrowData.readstatus ....` After the exit from the `loadComplete` you will no more have access to the original data received from the server.
Oleg
I'll try that, as well as try inserted that data as an attribute in another column and use afterInsertRow, and see which is faster.
Brandon
Many thanks for the quick reponse.
Brandon
@Brandon: another possible solution is the usage of the `userdata` see http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data#user_data and http://stackoverflow.com/questions/3848815/how-to-read-userdata-in-jqgrid/3849513#3849513
Oleg
@Brandon: You welcome! Don't forget to write me the results of your experiments.
Oleg
probably not userdata... as I'm dealing with record(row) level data, rather than general grid(user) data
Brandon
@Brandon: Because the value of the `userdata` is absolutely free you can insert as `userdata` for example array of ids which should be marked (has status `unreaded`) or some other information which is most easy for you to examine on the client side. In another old answer http://stackoverflow.com/questions/3564898/jqgrid-programatically-select-grid-row/3571392#3571392 I used `userdata` to mark some items as selected for example. So you are **absolutely free** in the usage of `userdata`. The small advantage of this is that the data will be **saved** in the grid.
Oleg