Skip to main content

Hidden Columns in jqGrid



Is there any way to hide a column in a jqGrid table, but have it show when the row is edited in the form editor modal dialog?





Source: Tips4all

Comments

  1. I just want to expand on queen3's suggestion, applying the following does the trick:

    editoptions: { dataInit: function(element) { $(element).attr("readonly", "readonly"); } }


    Scenario #1:


    Field must be visible in the grid
    Field must be visible in the form
    Field must be read-only


    Solution:

    colModel:[
    {name:'providerUserId',index:'providerUserId', width:100,editable:true, editrules:{required:true}, editoptions:{ dataInit: function(element) { jq(element).attr("readonly", "readonly"); } }},
    ],


    The providerUserId is visible in the grid and visible when editing the form. But you cannot edit the contents.



    Scenario #2:


    Field must not be visible in the grid
    Field must be visible in the form
    Field must be read-only


    Solution:

    colModel:[
    {name:'providerUserId',index:'providerUserId', width:100,editable:true, editrules:{required:true, edithidden:true}, hidden:true, editoptions:{ dataInit: function(element) { jq(element).attr("readonly", "readonly"); } }},
    ]


    Notice in both instances I'm using jq to reference jquery, instead of the usual $. In my HTML I have the following script to modify the variable used by jQuery:

    <script type="text/javascript">
    var jq = jQuery.noConflict();
    </script>

    ReplyDelete
  2. This feature is built into jqGrid.

    setup your grid function as follows.

    $('#myGrid').jqGrid({
    ...
    colNames: ['Manager', 'Name', 'HiddenSalary'],
    colModel: [
    { name: 'Manager', editable: true },
    { name: 'Price', editable: true },
    { name: 'HiddenSalary', hidden: true , editable: true,
    editrules: {edithidden:true}
    }
    ],
    ...
    };


    There are other editrules that can be applied but this basic setup would hide the manager's salary in the grid view but would allow editing when the edit form was displayed.

    ReplyDelete
  3. You can use the following code to hide a table column..

    JQuery("tableName").hideCol("colName");


    And you can use the following code to show it again.

    JQuery("tableName").showCol("colName");


    For your question, you can call the hideCol() code on the document.ready(), and you can bind the showCol() code on the dialog's edit/click event.

    ReplyDelete
  4. This thread is pretty old I suppose, but in case anyone else stumbles across this question...
    I had to grab a value from the selected row of a table, but I didn't want to show the column that row was from. I used hideCol, but had the same problem as Andy where it looked messy. To fix it (call it a hack) I just re-set the width of the grid.

    jQuery(document).ready(function() {

    jQuery("#ItemGrid").jqGrid({
    ...,
    width: 700,
    ...
    }).hideCol('StoreId').setGridWidth(700)


    Since my row widths are automatic, when I reset the width of the table it reset the column widths but excluded the hidden one, so they filled in the gap.

    ReplyDelete
  5. Try to use edithidden: true and also do

    editoptions: { dataInit: function(element) { $(element).attr("readonly", "readonly"); } }


    Or see jqGrid wiki for custom editing, you can setup any input type, even label I think.

    ReplyDelete

Post a Comment

Popular posts from this blog

Why is this Javascript much *slower* than its jQuery equivalent?

I have a HTML list of about 500 items and a "filter" box above it. I started by using jQuery to filter the list when I typed a letter (timing code added later): $('#filter').keyup( function() { var jqStart = (new Date).getTime(); var search = $(this).val().toLowerCase(); var $list = $('ul.ablist > li'); $list.each( function() { if ( $(this).text().toLowerCase().indexOf(search) === -1 ) $(this).hide(); else $(this).show(); } ); console.log('Time: ' + ((new Date).getTime() - jqStart)); } ); However, there was a couple of seconds delay after typing each letter (particularly the first letter). So I thought it may be slightly quicker if I used plain Javascript (I read recently that jQuery's each function is particularly slow). Here's my JS equivalent: document.getElementById('filter').addEventListener( 'keyup', function () { var jsStart = (new Date).getTime()...

Is it possible to have IF statement in an Echo statement in PHP

Thanks in advance. I did look at the other questions/answers that were similar and didn't find exactly what I was looking for. I'm trying to do this, am I on the right path? echo " <div id='tabs-".$match."'> <textarea id='".$match."' name='".$match."'>". if ($COLUMN_NAME === $match) { echo $FIELD_WITH_COLUMN_NAME; } else { } ."</textarea> <script type='text/javascript'> CKEDITOR.replace( '".$match."' ); </script> </div>"; I am getting the following error message in the browser: Parse error: syntax error, unexpected T_IF Please let me know if this is the right way to go about nesting an IF statement inside an echo. Thank you.