Jquery JQGrid - How to set alignment of grid header cells?
Asked Answered
V

6

26

Is it possible to align grid column headers in jqgrid? eg align left right or center?

In the jqrid documents http://www.trirand.com/jqgridwiki/doku.php?id=wiki:colmodel_options it says:

align: Defines the alignment of the cell in the Body layer, not in header cell. 
Possible values: left, center, right.

Note that it says "not in the header cell". How can I do this for the header cell (grid title cell)? The documentation fails to mention this little detail....

Vittorio answered 9/6, 2010 at 5:2 Comment(0)
Q
25

The best documented way to change column header alignment is the usage of setLabel method of jqGrid (see http://www.trirand.com/jqgridwiki/doku.php?id=wiki:methods).

You can change alignment of the column identified by 'name': 'Name' with the following code:

grid.jqGrid ('setLabel', 'Name', '', {'text-align':'right'});

With the code

grid.jqGrid ('setLabel', 'Name', 'Product Name', {'text-align':'right'},
             {'title':'My ToolTip for the product name column header'});

you can change the header name to 'Product Name' and set 'My ToolTip for the product name column header' as a tool tip for the corresponding column header.

You can also define some classes in your CSS and set it for the column headers also with respect of setLabel method.

By the way the name of the function 'setLabel' is choosed because you can not define colNames parameter of the jqGrid, but use additional 'label' option in the colModel to define a column header other as the 'name' value.

UPDATED: You can do able to use classes to define 'text-align' or 'padding'. Just try following

.textalignright { text-align:right !important; }
.textalignleft { text-align:left  !important; }
.textalignright div { padding-right: 5px; }
.textalignleft div { padding-left: 5px; }

and

grid.jqGrid ('setLabel', 'Name', '', 'textalignright');
grid.jqGrid ('setLabel', 'Description', '', 'textalignleft');

(I defined 5px as the padding to see results better. You can choose the padding value which you will find better in your case).

Quadripartite answered 9/6, 2010 at 14:38 Comment(4)
Thanks - {'text-align':'right'} works, but I would prefer to use a css class. Adding a css with .jqGrid('setLabel', 'Name', '', 'css-class-name'); didnt work - is that the wrong syntax?Vittorio
Actually, { 'text-align': 'left' } places the header text too hard to the left: it touches the grid line. I tried: { 'text-align': 'left', 'padding-left': '1px' }, but that moved the grid line at the end of the cell away by 1px as well. I just want my headers to have the same alignment as the data cells.Vittorio
@Jake: No, but you can use CSS only to do the same. If you have for example grid with the id of the <table> element as 'list' and need to set alignment of the climn with the name:'mycol' you can use the fact that the <th> element will have the id="list_mycol". So you can define the corresponding CSS style without calling of 'setLabel' method.Quadripartite
Hi Oleg, none of the code that you offered here works for me - any other ideas how to justify the columns aside from good old css hack?Circumambulate
Z
8

Just go to your css file of your jqgrid.

Look for:

ui-th-column,.ui-jqgrid .ui-jqgrid-htable th.ui-th-column
{overflow:hidden;white-space:nowrap;text-align:center; ...

And change the text-align.

I didn't find it eather with regular options.

I hope this will help you.

Bruno

Zosi answered 9/6, 2010 at 7:31 Comment(1)
This will change the alignment of every header cell, which is not useful. Need the headers to have the same alignment as the data cells.Vittorio
A
3

While using the 'setLabel' method seems feasible, I always want to have my header-cells aligned the same way as the cells. So I just use this function:

function pimpHeader(gridObj) {
    var cm = gridObj.jqGrid("getGridParam", "colModel");
    for (var i=0;i<cm.length;i++) {
        gridObj.jqGrid('setLabel', cm[i].name, '', 
            {'text-align': (cm[i].align || 'left')}, 
            (cm[i].titletext ? {'title': cm[i].titletext} : {}));
    }
}

This uses the alignment of the cells to align the header. To be called like this:

pimpHeader(jQuery("#grid"));

If you want, you can extend your Column-Model with 'titletext', which is shown as a tooltip-header, like so:

colModel: [{ name: 'name', label: 'Name', align: 'right', titletext: 'Name-Tooltip'}, ...]
Acentric answered 30/1, 2016 at 12:27 Comment(1)
5.5 years later and many thanks - this was perfect for a client using an older version of jqGrid!Jeggar
H
2

Please try this

loadBeforeSend: function () {
    $(this).closest("div.ui-jqgrid-view").find("table.ui-jqgrid-htable>thead>tr>th").css("text-align", "left");
}
Heterography answered 4/12, 2013 at 6:39 Comment(0)
R
0

see the source to find out the css that your grid refer to and then you can try this:

setTimeout(function(){
   jQuery('.ui-th-column').css('text-align','center');
},1);
Racer answered 11/3, 2014 at 4:55 Comment(0)
C
0

You can simply add the align attribute to your Column in ColModel:

colModel: [
          {name: 'MyColumn', index: 'MyColumn', align: 'center'}
      ],
Corrientes answered 14/3, 2017 at 13:39 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.