2016-12-27 2 views
2

내 jqgrid의 DropDown에 내 서버 데이터를로드하려고합니다. 내 코드,jqgrid colmodel 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 비주얼 스튜디오 모두의

답변

2

먼저 사용하고, 당신이 현재 사용 formatter: 'select'을 사용해야 할 때 이해하는 것이 중요합니다. ID 정보가 UnitID 인 그리드를 채우려면 필요하지만 ID에 해당하는 텍스트를 으로 표시해야합니다. 예를 들어, 서버에서 얻을 JSON 데이터는 내용 "de", "en", "fr" 등이 호텔 language를 포함 할 수 있지만 "English" 대신 "en""French"의 열 "German"에 표시하는 대신 "de""fr" 대신. 경우에 당신이 정말로 formatter: 'select'를 사용하는 필요 경우에 당신은

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

을 정의해야합니다, 당신은하기 전에, 다음 editoptions.value설정해야 서버에서 아약스를 통해 주요 데이터를 editoptions.value을로드해야합니다 url에서 반환 된 그리드가 처리됩니다. 이 경우 까지 표준 데이터가 url에서 반환되고 editoptions.value에 필요한 데이터가있는 것이 좋습니다. 하나는 beforeProcessing 콜백 (당신이 사용하는 레트로 버전 4.4.4에서도 지원됨)을 사용할 수 있고 setColProp 메소드에 대해 editoptions.value을 동적으로 설정할 수 있습니다. 자세한 내용과 코드 예는 the answer을 참조하십시오.

(선택에 사용되는 ID와 값이 같은 경우), 다음 직렬화 된 배열에 GetUnit 액션에서 반환 된 데이터의 형식을 변경할 수 있습니다 당신은 formatter: 'select'를 사용할 필요가 없습니다 경우

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

대신 editoptionsbuildSelect 속성을 사용하십시오. dataUrl의 값은 GetUnit 액션의 URL이어야하며 모든 utits가 포함 된 문자열 배열을 반환합니다. 콜백 buildSelect은 JSON 배열을 모든 옵션이있는 <select>을 나타내는 HTML 조각으로 변환해야합니다. 자세한 구현 정보 및 코드 예제는 the old answer을 참조하십시오.

마지막으로 width: "200px"width: 200으로 수정해야합니다. width 속성의 값은 숫자 또는 숫자로 변환 될 수있는 문자열이어야합니다. px 또는 다른 접미어의 사용법이 잘못되었습니다.다음 추천 픽스는 index 속성의 값이 name 속성의 값과 동일한 경우 및 다른 모든 index 속성을 colModel에서 제거하는 것입니다.

+0

항상 그렇듯이 도움이됩니다. 귀하의 의견에 감사드립니다. 내가 제안한대로 시도했지만 여전히 인라인 jqgrid의 드롭 다운에 대한 빈 셀을 가져옵니다. 업데이트 된 코드를 찾고 친절하게 제안 해주십시오. 감사. – Kavitha

+1

@Kavitha : 미안하지만 내 제안을 오해 한 것입니다. 'beforeProcessing' 내부에서 추가 Ajax 호출을하지 말아야합니다 **. 'url' (격자의 주요 데이터를 채우는 데 사용됨)의 주된 대답은 현재'GetUnit'을 제공하는 정보를 포함해야합니다. 질문에 대한 현재 답변에서 참조한 [답변] (http://stackoverflow.com/a/19427444/315935)을주의 깊게 읽어주십시오. JSON 응답과 해당 C# 코드에서'colModelOptions' 부분을보십시오. – Oleg

+0

당신은 최고입니다. 고마워. 완벽하게 작동합니다. 귀하의 의견은 매우 유용합니다. – Kavitha