2016-06-07 3 views
0

У меня есть два раскрывающихся списка, первый из которых заполняется из значений базы данных, а второй (PriceCode) зависит от того, что пользователь выбирает в первом (CurrCd). Мой вопрос заключается в том, как динамически заполнять этот второй список? Я пытаюсь сделать это в dataEvents, но не имеет способа ссылаться на второй выпадающий список в режиме редактирования. Есть ли правильный и логичный способ сделать это?jqgrid каскадные выпадающие списки в режиме редактирования всплывающих окон

Вот мой код до сих пор:

grid.jqGrid({ 
      datatype: 'local', 
      jsonReader: als.common.jqgrid.jsonReader('EntityCd'), 
      mtype: 'POST', 
      pager: '#billingPager', 
      loadonce: true, 
      colNames: ['Currency', 'Status', 'Bill Curr', 'Price Code'], 
      colModel: [ 
       { 
           { name: 'DefaultCurr', index: 'DefaultCurr', width: 20, sortable: false }, 
       { name: 'BillStatus', index: 'BillStatus', width: 13, sortable: false }, 
       { 
        name: 'CurrCd', index: 'CurrCd', width: 20, sortable: false, 
        editable: true, 
        edittype: 'select', stype: 'select', 
        editoptions: { 
         dataUrl: als.common.getServerPath() + 'LegalEntitiesAjax/GetCurrencies', 
         dataEvents:[{ 
          type:"change", 
          fn: function (e) { 

           //populate price code list here       
           //below does not work to populate PriceCode 

           $.ajax({ 
            type: 'POST', 
            traditional: true, 
            contentType: 'application/json; charset=utf-8', 
            url: als.common.getServerPath() + 'LegalEntitiesAjax/GetPriceList', 
            data: JSON.stringify({ curcd: this.value }), 
            async: false, 
            success: function (data) {          

             for(i=0; i < data.length; i++) { 
              $('select#PriceCode').append('<option val=\"' + data[i].PriceCode + '">' + data[i].Description + '</option>'); 
             } 


            }, 
            error: function (val) { } 
           }); 


          } 
         }], 

         buildSelect: function (data) { 
          var currSelector = $("<select id='selCurr' />"); 
          $(currSelector).append($("<option/>").val('').text('---Select Currency---')); 
          var currs = JSON.parse(data); 
          $.each(currs, function() { 
           var text = this.CurName; 
           var value = this.CurCode; 
           $(currSelector).append($("<option />").val(value).text(text)); 
          }); 

          return currSelector; 
         } 
        } 
       }, 
       { name: 'PriceCode', index: 'PriceCode', width: 20, sortable: false, editable: true, edittype: 'select', stype: 'select'} 
      ], 
      loadtext: 'Loading...', 
      caption: "Bill Entities", 
      scroll: true, 
      hidegrid: false, 
      height: 300, 
      width: 650, 
      rowNum: 1000, 
      altRows: true, 
      altclass: 'gridAltRowClass', 
      onSelectRow: webview.legalentities.billing.onBillingSelected, 
      loadComplete: function (data) { 
       if (data.length > 0) 
       { 

       } 
       var rowIds = $('#billingGrid').jqGrid('getDataIDs'); 
       $("#billingGrid").jqGrid('setSelection', rowIds[0]); 
      }, 
      rowNum: 1000 
     }); 
     grid.jqGrid('navGrid', '#billingPager', { 
      add: ($("#dev").text() == "True" || $("#globalqc").text() == "True"), 
      edit: false, 
      del: false, 
      search: false, 
      refresh: false 
     }, 
     { // Edit Options 
     }, 
     { // Add Options 
      addCaption: 'Add New Billing Entity', 
      beforeInitData: function (formid) { 

      }, 
      url: als.common.getServerPath() + 'LegalEntitiesAjax/AddBillingEntity/', 
      recreateForm: true, 
      closeAfterAdd: true, 
      reloadAfterSubmit: true 
     }, 
     { // Del Options 
     }); 

ответ

0

The old answer показывает, как можно реализовать зависимые выбирает. Вы используете редактирование формы. Таким образом, элемент <select> столбца PriceCode редактирования формы будет иметь идентификатор = «PriceCode». Вы можете использовать $("#PriceCode").html(/*new options*/);, чтобы изменить параметры <select> редактирование поля PriceCode столбец внутри change обработчик события CurrCd столбец.

+0

Олег, он работал хорошо, но теперь я работаю над режимом редактирования и нуждаюсь во втором списке, чтобы иметь предварительно заданные значения и правильное значение, когда пользователь пытается отредактировать запись. Но dataEvents не имеет типа нагрузки. Любая идея, как вызвать этот выбор после загрузки формы? – sarsnake

+0

@sarsnake: Извините, но я не могу следовать за вами. Лучше подробно описывать проблему. Что вы запустите? Что вы подразумеваете под «dataEvents не имеет типа нагрузки»? 'dataEvents' просто определяет обработчики событий, которые будут связаны. Что jqGrid загружает для вас через 'dataUrl' и то, что вы загружаете с помощью прямого вызова' $ .ajax'. – Oleg

Смежные вопросы