2009-11-02 82 views
53

有没有什么方法可以隐藏jqGrid表中的列,但在表格编辑器模式对话框中编辑行时,它显示为只读状态?jqGrid中的隐藏列

回答

38

我只是想扩大queen3的建议下,应用以下的伎俩:

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

方案1

  • 场必须在网格中可见
  • 字段必须在表格中可见
  • 字段必须是只读的

解决方案:编辑表单时

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

的providerUserId是在网格中可见和可见。但是你不能编辑内容。


方案2

  • 场必须是不可见的网格
  • 场必须在形式
  • 场必须是只读
可见

解决方案

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"); 
          } 
        } 
     }, 
     ] 

请注意,在这两种情况下,我使用jq引用jquery,而不是通常的$。在我的HTML我有以下脚本修改的jQuery使用的变量:

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

高超的解释与情景..! +1 – 2012-01-24 09:30:03

21

您可以使用下面的代码隐藏表列..

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

你也可以使用下面的代码来再次显示它。

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

对于你的问题,你可以调用上的document.ready()的hideCol()代码,您可以绑定在该对话框的编辑showCol()代码/单击事件。

+0

您还可能想在对应于编辑完成的事件中,或者在用户/编辑器正在编辑时绑定hideCol()代码。 – 2009-11-02 15:17:36

78

此功能内置于jqGrid中。

设置您的网格功能如下。

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

有可以应用,但这些基本设置会躲在经理在网格视图的收入,而且将允许编辑被显示在编辑表单当其他editrules。

+0

这就是我正在寻找的东西,除非我不希望它在编辑表单中可编辑。我想没有办法做到这一点。 – maxpower47 2009-11-17 12:32:06

+0

所以你希望它在编辑窗体中可见,但只读? – 2009-11-17 16:42:08

+0

yep --------------- – maxpower47 2009-11-20 16:01:06

1

尝试使用edithidden:真实,也做

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

还是看的jqGrid维基自定义编辑,您可以设置任意输入类型,甚至标签,我认为。

7

这个线程是我猜想的很老,但万一别人绊倒这个问题... 我不得不从表格的选定行中获取一个值,但我不想显示列排是从。我使用了hideCol,但是和Andy看起来很混乱的问题一样。要修复它(称之为黑客攻击),我只需重新设置网格的宽度即可。

jQuery(document).ready(function() { 

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

由于我的行宽度自动的,当我重置表的宽度将其重置列宽,但不包括隐藏的一个,所以它们填充在间隙中。

+1

与jqgrid的4.0版本完美结合。 – 2011-07-07 20:01:47

+0

尝试[此方法](http://www.trirand.com/blog/?page_id=393/help/recall-and-set-column-widths/)用于事后调整列的大小。 – WEFX 2012-02-27 22:11:28

0

要隐藏网格列

jQuery("#validGrid").jqGrid('hideCol',str); 
0

这是一个有点老了,这个帖子。但这是我的代码来显示/隐藏列。我使用内置函数来显示列并将它们标记出来。

显示列显示/隐藏列的功能。 #jqGrid是我的网格的名称,columnChooser是jqGrid列选择器。

function showHideColumns() { 
     $('#jqGrid').jqGrid('columnChooser', { 
      width: 250, 
      dialog_opts: { 
       modal: true, 
       minWidth: 250, 
       height: 300, 
       show: 'blind', 
       hide: 'explode', 
       dividerLocation: 0.5 
      } });