【问题标题】:jqGrid Initialize DropDownList ItemsjqGrid 初始化 DropDownList 项
【发布时间】:2014-07-25 21:43:19
【问题描述】:

我有一个jqGrid 控件,其中包含一个下拉列表字段。列表中的项目来自服务器端使用ajax 的方法,但我不确定如何构造返回的json 以使其与网格兼容。我查看了this question,根据答案,网格似乎需要以下下拉格式:

[value] : [display text]

我对 JavaScript 比较陌生,不确定这是什么类型的数据(我假设它是键值对?)所以我不知道如何从我的 json 对象创建这种类型的数组.这是我尝试过的:

function populateTable(){
    $.ajax({
        type: "POST",
        url: "MyHttpHandler.ashx",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (result) {
            var jsonObject = jQuery.parseJSON(result.d);

            var dropdpwnvalues = new[];

            for(var i = 0; i< jsonObject.length; i++){
                dropdpwnvalues.push({ jsonObject[i].id : jsonObject[i].name });
            }

            // The rest of the function
    );
}

dropdpwnvalues 变量是绑定到网格的变量。请注意,jsonObject 上确实有 idname,但是这个语法

dropdpwnvalues.push({ jsonObject[i].id : jsonObject[i].name });

显然是不正确的。有什么想法可以从这个 json 对象中创建列表吗?

【问题讨论】:

  • dropdpwnvalues.push({ value: jsonObject[i].id , displayText: jsonObject[i].name }); ?
  • 我想您在当前的代码中犯了很多错误。例如,var jsonObject = jQuery.parseJSON(result.d); 行显示您将返回的 Object 数据不需要额外转换为String。取而代之的是,您应该从 "MyHttpHandler.ashx" 方法中返回 Object。 .NET Framework 将自动 序列化为 JSON。 $.ajax 将数据从 JSON 反序列化为对象,result.d 将是您可以直接使用的对象。不需要显式调用jQuery.parseJSON
  • 您发布的有关您创建的 jqGrid 的信息太少,所以我不得不猜测。您可能会遇到其他问题,因为您使用填充网格的数据格式意味着您在用于填充网格的数据中使用了 id。这意味着您需要使用formatter: "select" 将数据显示为文本(名称而不是ID)。重要的是您必须设置editoptions.valueformatoptions.value 之前 从服务器返回以填充网格的数据将由jqGrid 处理。详情请见the answer

标签: javascript jquery asp.net json jqgrid


【解决方案1】:

我认为最简单的方法是创建一个字符串而不是对象数组:

var sessionStream = ""

for (var i = 0; i < sessions.length; i++) {
    sessionStream += sessions[i].id + ":" + sessions[i].name + ";";
}

// Remove the trailing ';' in the stream
sessionStream = sessionStream.substring(0, sessionStream.length - 1);

我最初认为网格是一个列表。它可以很好地绑定到一个字符串。

【讨论】:

    【解决方案2】:

    您需要以以下格式返回 Select 列表的 JSON 值:

    {1:'One',2:'Two'}
    

    而且,我相信您正在 jqGrid 的 loadcomplete 事件中使用它。因此,要设置 JSON 值,只需将其用作 ,

    loadcomplete : function(){      
            $.ajax({
                 type: "POST",
                 url: "MyHttpHandler.ashx",
                 dataType: "json",
                 success : function ( result) {
                      $("#gridId").setColProp('columnName', { editoptions: { value: result}});
                      }
                 });
              }
    

    【讨论】:

    • 服务器上的序列化器返回一个字符串,而不是一个对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多