jqGrid列模型在代码后面创建

时间:2014-08-27 08:08:55

标签: c# javascript asp.net jqgrid

我正在代码后面创建列模型,但是我在堆栈中为数值创建editoption,这是一个函数检查值,如果它的数字otherWhise警告消息,但我无法在后面的代码中使用javascript函数。

在我模拟后面的代码后,我将转换为json以在aspx页面中使用。

c#代码背后的

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 个答案:

答案 0 :(得分:1)

问题很明显。 JSON不支持函数作为一种类型。您可以轻松完成以下任务:1)在服务器端填充字符串作为dataInit的值。 2)你"预处理"列模型并将dataInit的非法字符串值更改为对相应函数的引用。你可以"预处理"创建网格之前的列模型,或者在创建beforeProcessing回调内部之后,甚至是在开始编辑之前的某个地方之后的列模型。由于dataInit仅在编辑期间使用,因此您必须在编辑开始之前随时修复dataInit

要更改colModel,您可以使用setColProp方法,也可以按colModel获取内部var colModel = $("#gridid").jqGrid("getGridParam", "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包含对自定义格式化程序相同构思的描述。