2016-12-27 68 views
2

我想在我的jqgrid的DropDown中加载我的服务器数据。我的代码,jqgrid colmodel editoptions加载json结果

更新的代码:

public ActionResult GetUnit() 
    { 
     List<UnitModel> getUnitValues = new List<UnitModel>(); 
     //ToDo db code 
     Dictionary<int, string> unitValues = new Dictionary<int, string>(); 
     unitValues = getUnitValues.ToDictionary(x => x.UnitID, x => x.UnitDesc); 
     unitValues.Add(4, "Unit2/3"); 
     unitValues.Add(1, "Unit1"); 
     unitValues.Add(2, "Unit2"); 
     unitValues.Add(3, "Unit3"); 
     return Json(unitValues, JsonRequestBehavior.AllowGet); 
    } 

我的jqGrid:

 colModel: [... 
     { 
      name: 'UnitID', index: 'UnitID', editable: true, edittype: 'select', width: "200", 
      formatter: 'select', editoptions: { value: unitslist}, 
      editrules: { custom: true, custom_func: dupicateRecordValidation 
      } 
     }, 
...], 

     beforeProcessing: function() { 
        $.ajax({ 
        url: '/Home/GetUnit/', 
        dataType: 'json', 
        type: 'POST', 
        contentType: 'application/json; charset=utf-8', 
        success: function (data) { 
         $.map(data, function (value, key) { 
          unitsList += '"' + value + '"' + ':' + '"' + key + '"' + ','; 
         }); 
         unitsList += '}'; 
         alert(unitsList); 
        } 
       }); 
      }, 

但是,这是行不通的。 jqgrid DropDown列加载空单元格。我错过了什么吗?这是正确的方法吗?请建议是否有任何替代方法来加载jqgrid与服务器数据的下拉列表,并选择该行的默认值。谢谢。

注:我使用jQuery的jqGrid v4.4.4的Visual Studio

回答

2

首先,必须了解何时应该使用formatter: 'select',您目前使用的是非常重要的。如果您想要在网格中填入ID为UnitID的网格,但您需要显示文本,这对应于ID。例如,JSON数据,这些数据从服务器获取可能包含物业language,与内容"de""en""fr"等等,但要在列"German"显示,而不是"de""English"代替"en""French"而不是"fr"。在这种情况下,你应该定义

formatter: 'select', editoptions: { value: 'de:German;en:English;fr:French' }, 
editable: true, edittype: 'select' 

如果你真的需要使用formatter: 'select',你需要通过Ajax从服务器加载editoptions.value,则editoptions.value必须设置之前的主要数据将处理从url返回的网格。在这种情况下,我会建议您扩展url返回的标准数据与editoptions.value所需的数据。可以使用beforeProcessing回调(即使在使用复古版本4.4.4时也支持该回调),并且可以根据setColProp方法动态设置editoptions.value。有关更多详细信息和代码示例,请参阅the answer

如果不需要使用formatter: 'select'(如ID和值,在选择使用时,都是一样的),那么你可以改变数据从GetUnit行动返回序列化阵列格式:

["Unit1", "Unit2", "Unit2/3"] 

并使用dataUrlbuildSelecteditoptions而不是value的性质。 dataUrl的值应为GetUnit操作的URL,它返回包含所有使用者的字符串数组。回调buildSelect应该将JSON数组转换为HTML片段,其中包含所有选项的<select>。有关更多实现细节和代码示例,请参阅the old answer

最后,您应该修复width: "200px"width: 200width属性的值应该是可以转换为数字的数字或字符串。 px或其他后缀的用法是错误的。如果index属性的值与name属性的值相同,则下一个建议修复将从colModel中删除index: 'UnitID'和所有其他index属性。

+0

一如既往,你是如此有帮助。感谢您的反馈意见。我试着按照你的建议,但仍然得到了内联jqgrid下拉列表的空单元格。请找到更新的代码,并建议我。谢谢。 – Kavitha

+1

@Kavitha:对不起,但你误解了我的建议。您应该**不**在'beforeProcessing'内部进行额外的Ajax调用。 'url'的主要答案(用于填充网格的主要数据)应该包含当前提供'GetUnit'的信息。请仔细阅读[答案](http://stackoverflow.com/a/19427444/315935),我在当前的答案中引用了你的问题。查看JSON响应中的'colModelOptions'部分以及相应的C#代码。 – Oleg

+0

你真棒。非常感谢。它的工作完美。您的意见非常有帮助。 – Kavitha