2012-01-31 170 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