2012-01-31 159 views
1

我需要jqgrid在某些列中显示一些特殊字符,如“<test>”,尝试使用autoencode=true,但它将所有列都更改为HTML编码,就像我在其他一些列中有按钮,需要编码,我们可以为特定列设置自动编码吗?有任何想法吗?jqgrid没有显示特殊符号

编辑:我已经使用了格式化所建议的奥列格,但我遇到了问题,我曾在的cols,在那里我需要编辑模式之间切换到“保存”按钮,保存并完成”和‘取消’我我张贴的代码,但我不知道如何隐藏之间切换/取消隐藏在编辑模式下的按钮:

网格设置:

  $("#list").jqGrid({ 
      url: '<%= Url.Action("JSONData","CompanyInfo")%>', 
      datatype: 'json', 
      colNames: ['ID', 'Company', 'Address' , 'Employers ', ''], 
      colModel: [ 
       { name: 'ID', index: 'ID', align: 'left', sortable: false, editable: true, hidden: true }, 
       { name: 'Company', index: 'Company', align: 'left', sortable: false, editable: false, formatter: ConvertLineChartoBR }, 
       { name: 'Address', index: 'Address', editoptions: { size: 100 }, align: 'left', sortable: false, editable: true, edittype: 'textarea', formatter: ConvertLineChartoBR, unformat: ConvertLineChartoN }, 
       { name: 'Employers', index: 'Employers', editoptions: { size: 100 }, align: 'left', sortable: false, editable: true, edittype: 'textarea' }, 
       { name: 'act', index: 'act', editable: false, sortable: false, fixed: true, formatter: setupEdit}], 
      pager: $('#pager'), 
      autowidth: true, 
      shrinkToFit: true, 
      rowNum: currRecords, 
      rowList: [5, 10, 20, 50], 
      recordtext: "View Records {0} - {1} of {2}", 
      emptyrecords: "No records to view", 
      pgtext: "Page {0} of {1}", 
      sortorder: "desc", 
      viewrecords: true, 
      autoencode: true, 
      caption: 'Test' 
     }); 

SetupEdit(对于格式化)

 function setupEdit(cellvalue,options,rowObject) { 

     var btnSave = "<input type='button' value='Save' style='display:none' onclick=\"$('#list').jqGrid('saveRow', '" + options.rowId + "', null, '<%= Url.Action("GridSave","Company")%>', null, aftersavefunc);\" />"; 
     var btnSaveFinished = "<input type='button' value='Save & Finish' style='display:none' onclick=\"$('#list').jqGrid('saveRow', '" + options.rowId + "', null, '<%= Url.Action("GridSaveFinished","Company")%>', null, aftersavefunc);\" />"; 
     var btnCancel = "<input type='button' value='Cancel' style='display:none' onclick=\"$('#list').jqGrid('restoreRow', '" + options.rowId + "', aftercancelfunc);\" />"; 
     var Edit = "<input type='button' value='Edit' class='editButton' onclick=\"$('#list').jqGrid('editRow','" + options.rowId+ "',false,oneditfunc);\" />"; 
     return btnSave + btnSaveFinished + btnCancel + Edit; 
    } 

Ø n编辑(在编辑按钮点击)

function oneditfunc(result, x) { 
    // I need to unhide the button of the last column where buttons are populated in setupEdit 
    // On Edit click, i need to enable btnSave,btnSaveFinished and btnCancel 
    //Again on aftersavefunc/aftercancelfunc i need to reset back the column value to display on Edit button 
} 

回答

2

不幸的是,您不能仅为一列设置autoencode: true

我认为你真正的问题是因为你在创建按钮的列中以错误的方式放置了HTML标记。也许你把HTML标记作为数据的一部分,这是不好的。更好的方法是使用custom formatters。在这种情况下,您应该在按钮列的JSON输入中仅输入数据,它可以被formater用作按钮的文本。如果您需要相同的按钮文本,则可以为按钮列设置空白数据。例如

formatter: function() { 
    return "<span class='ui-icon ui-icon-plus'></span>"; 
} 

在这种情况下,您可以使用autoencode: true没有任何问题。按钮将根据需要显示,<test>等文本将被编码并正确显示。

修订:您可以使用getColumnIndexByName,我在我的许多老的回答中:

var getColumnIndexByName = function (grid, columnName) { 
     var cm = grid.jqGrid('getGridParam', 'colModel'), i, l = cm.length; 
     for (i = 0; i < l; i++) { 
      if (cm[i].name === columnName) { 
       return i; // return the index 
      } 
     } 
     return -1; 
    }; 

它可以帮助你在列获得列在colModel索引。例如,为了使按钮看起来对应于jQuery UI的风格,你可以使用

loadComplete: function() { 
    var iAct = getColumnIndexByName ($(this), 'act'); 
    $(this).find("tbody>tr.jqgrow>td:nth-child(" + (iAct + 1) + 
     ")>input[type='button']").button(); 
} 

让我们知道的ROWID,并希望得到您放置在列“行为”的按钮。那么你需要从那里展示一些或隐藏其他。您可以使用下面的代码片段:

var iAct = getColumnIndexByName ($(this), 'act'), 
    $td = $('#' + $.jgrid.jqID(rowid) + ">td:nth-child(" + (iAct + 1) + ")"), 
    $save = $td.find(">input[value='Save']"), 
    $saveAndFinish = $td.find(">input[value='Save & Finish']"), 
    $cancel = $td.find(">input[value='Cancel']"), 
    $edit = $td.find(">input[value='Edit']"); 
$save.show(); 
$saveAndFinish.show(); 
$cancel.show(); 
$edit.hide(); 

我会建议你使用带气泡提示,而不是在按钮文本图标保存地点在网格中。

+0

谢谢。我可以用这种方式设置它,没有任何问题。但是在编辑模式下,编辑按钮需要用保存和取消按钮来替换。我用setRowData做了这个。现在看起来我不能再使用它了。有关如何解决这个问题的任何建议? – remo 2012-01-31 21:18:44

+0

@remo为什么不使用预定义的'formatter:'actions''?它做你需要的。如果您确实需要自己实现相同的功能,则可以在格式化程序中添加许多按钮,但是应该隐藏一些按钮:““然后你可以显示你需要显示的按钮,并隐藏不需要的按钮,同样的'formatter:'actions''。 – Oleg 2012-02-01 07:13:34

+0

我无法使用预定义的动作,因为我有更多的按钮添加到编辑模式,我会尝试做一些显示在其他多个按钮,其他隐藏。谢谢 – remo 2012-02-01 13:39:57

0

尝试HTML实体&gt;&lt;><,分别。

我使用它们如下:

<测试>

另一个字符,这可能有助于为&amp;&

0

有被解释为html标记。你只需要将<and>更改为&lt; and &gt; ..如果你使用php,htmlspecialchars函数将帮助你做到这一点。但是我相信大多数语言都有类似的功能。

0

Does jqgrid display special characters?

“你还必须要函数utf8_encode(” 串 “)你在PHP中的字符串。”

+0

欢迎来到Stack Overflow!请在评论中发布可能的重复内容,即“可能重复:http://stackoverflow.com/q/5512954/900747”(点击问题链接获取链接)。谢谢! – 2012-10-11 03:43:16