Is it possible to Stop jqGrid row(s) from being selected and/or highlighted?
Asked Answered
G

5

23

I've looked at the documentation but I've been unable to find an answer. Is there a way to prevent a row from being highlighted when selected? That or even a way to stop the row being selected at all. I like the "hoverrows: true" option, but ideally I would like to stop a row from being selected on-click.

Thanks,

Update: I've been able to "hackily" implement something which seems to be an interim fix. I don't really like it at all and would idealy like a better solution, if there is one...

I have found that if I pass the option

onSelectRow: function(rowid, status) {
    $('#'+rowid).removeClass('ui-state-highlight');
}

when I instantiate the jqGrid, I can strip the highlight when it is added.

Is there another, more ideal, way to do this?

Grackle answered 27/1, 2010 at 15:30 Comment(2)
Just curious: All rows, rows meeting a specific criteria (i.e., "odd" rows), or a specific single row?Bacchae
any row which is clicked on. the natural behavior of jqGrid is to apply the css class ui-state-highlight to a row, when it is clicked. I wish to stop this.Grackle
P
57

Use the following code:

beforeSelectRow: function(rowid, e) {
    return false;
}
Pullen answered 27/1, 2010 at 23:39 Comment(4)
Perfect! This is exactly the way I was trying to do it, I just couldn't find the right event to hook off. Thanks.Grackle
Also be sure to match casing. beforeselectrow does not work.Suck
What sucks about using this implementation you then disable onCellSelect :(Aikido
It doesn't gray out the row, just stops the selection. Added a better and easier answer below using the rowattr callback instead of the beforeSelectRow callback.Measly
M
7

If you, like me, have a gazillion jqGrids and don't want to override onSelectRow for every single one, here's a global version of Reigel's solution that worked nicely for me:

jQuery.extend(jQuery.jgrid.defaults, {
    onSelectRow: function(rowid, e) {
        $('#'+rowid).parents('table').resetSelection();
    }
});
Madura answered 19/9, 2011 at 8:51 Comment(2)
Very nice. I think only people who have a whole bunch of these things hanging around will appreciate your answer +1Lagging
This is a great answer. using resetSelection allows you to preserve the onSelectRow functionality and still clear the selection (I have a custom checkbox implementation that also toggles the checkbox on row click; this allows my code to keep working without the nasty selection color :))Eastbourne
Y
2

try:

onSelectRow: function(rowid, status) {
    $("#grid_id").resetSelection(); //Resets (unselects) the selected row(s). Also works in multiselect mode.
}

you can read documentations here. Hope it helps you...

Yet answered 27/1, 2010 at 16:57 Comment(2)
Slightly more accurate than my solution. Thanks.Grackle
This is useful when you want to perform certain actions and then reset the selection. Great solution.Adhamh
B
1

I suppose you could address this in the CSS directly. Just override the values for ui-state-highlight for your specific table

#table_id tr.ui-state-highlight {
  border: inherit !important;
  background: inherit !important;
  color: inherit !important;
}

#table_id tr.ui-state-highlight a {
  color: inherit !important;
}

#table_id tr.ui-state-highlight .ui-icon {
  background-image: inherit !important;
}

I used the value inherit just as an example - you will likely need to copy some values from your theme.css to make this work.

Bacchae answered 27/1, 2010 at 16:23 Comment(2)
Thank's, I'll give this a shot in the morning and get back to you.Grackle
For browser compatibility sakes I'm going to dodge this implementation. However it does seem quite nice to hide this problem in the css. Thanks anyway +1.Grackle
M
0

Yes, use the rowattr callback:

rowattr: function (rowData,currentObj,rowId) {
    if (rowData.SomeField=="SomeValue") { 
        return {"class": "ui-state-disabled"};
    }
},

This also grays out the row and disables the selection.

Measly answered 20/9, 2018 at 16:24 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.