2014-08-27 34 views
0

我在後面的代碼創建列模型,但我在創建編輯選項的數值,這是一個函數檢查值,如果它的數字otherwhise提醒消息,但我不適合JavaScript在代碼後面的功能。jqGrid列模型在代碼後面創建

我在後面的代碼模型後,我轉換爲json使用在aspx頁面。背後

else if (prop.PropertyType == typeof(decimal)) 
{ 
    pr.name = prop.Name; 
    pr.index = prop.Name; 
    pr.sorttype = "number"; 
    pr.editoptions = new { dataInit = numericonly }; 
} 

ASPX

function numericonly(elem) { 
     $(elem).numeric(false, function() { alert("Integers only"); this.value = ""; this.focus(); }); 
    } 

回答

1

問題

C#代碼是明確的。 JSON不支持將函數作爲類型。您可以輕鬆做到以下幾點:1)在服務器端填寫字符串作爲值dataInit。 2)您「預處理」列模型並將非法字符串值dataInit更改爲對相應函數的引用。您可以在創建網格之前或者在創建回調內部之後「預處理」列模型,或者在開始編輯之前的某個地方甚至更晚些。由於dataInit將僅在編輯過程中使用,因此必須在編輯開始之前隨時修改dataInit

要更改colModel既可以使用setColProp方法也可以通過var colModel = $("#gridid").jqGrid("getGridParam", "colModel");得到內部colModel陣列的參考,然後做一些列的任何所需的修飾。該代碼看起來大概如下:

function numericonly(elem) { 
    ... 
} 

... 
var colModel = $("#gridid").jqGrid("getGridParam", "colModel"), i, cm; 

for (i = 0; i < colModel.length; i++) { 
    cm = colModel[i]; 
    if (cm.editoptions != null && typeof cm.editoptions.dataInit === "string") { 
     switch (cm.editoptions.dataInit) { 
      case "numericonly": 
       // function numericonly is visible here and can be used 
       cm.editoptions.dataInit = numericonly; 
       break; 
      .... 
      default: 
       delete cm.editoptions.dataInit; // delete wrong value 
       break; 
     } 
    } 
} 

The old answer包含自定義格式的情況下,同樣的想法的描述。

+0

謝謝你的時間! – Mert 2014-08-28 06:59:05

+1

@Mert:不客氣!順便說一下,我建議你使用'colModel'的'template'屬性(詳情見[這裏](http://stackoverflow.com/a/6047856/315935))。你會遇到'dataInit'的問題,因爲'template'屬性的值必須是對象而不是字符串。儘管如此,列模板的使用大多對應於基於**數據類型**的格式,並具有所有排序,編輯,搜索和格式設置。使用模板,你可以減少'colModel',並使你的代碼更具可讀性和可維護性。 – Oleg 2014-08-28 07:09:08