2009-08-18 10 views
10

Tworzę jqgrid z rozwijanymi kolumnami i używam edycji komórek. Muszę opcje rozwijanej kolumn zmienić dynamicznie i próbowałem wykonawczych przez ustawienie kolumny być:jqGrid opcja dynamicznego wyboru

{ name: "AccountLookup", index: "AccountLookup", width: 90, editable: true, resizable: true, edittype: "select", formatter: "select" }, 

a następnie w razie beforeCellEdit mam:

beforeEditCell: function(id, name, val, iRow, iCol) { 
     if(name=='AccountLookup') {    
      var listdata = GetLookupValues(id, name); 
      if (listdata == null) listdata = "1:1";        
      jQuery("#grid").setColProp(name, { editoptions: { value: listdata.toString()} })         
     } 
    }, 

GetLookupValues po prostu zwraca ciąg znaków w formacie "1: One; 2: Two" itd. To działa dobrze, ale opcje są zapełniane jednym kliknięciem za - tj. klikam AccountID w wierszu 1, a menu rozwijane jest puste, ale kiedy ja kliknij AccountID w wierszu 3 opcje ustawione w wierszu 1 kliknij są wyświetlane w wierszu 3 kliknij. I tak dalej. Zawsze jedno kliknięcie z tyłu.

Czy istnieje inny sposób osiągnięcia tego, czego potrzebuję? Bacialnie wyświetlane opcje rozwijane zawsze się zmieniają i muszę je załadować, gdy użytkownik wchodzi do komórki w celu edycji. Być może w jakiś sposób mogę uzyskać kontrolę select w zdarzeniu beforeEditCell i ręcznie wprowadzić jego wartości zamiast wywołania setColProp? Jeśli tak, to czy mogę to zrobić?

Inna sprawa - jeśli lista rozwijana jest pusta, a użytkownik nie anuluje edycji komórki, skrypt siatki zgłasza błąd. Używam edycji pasków klienta, jeśli to robi różnicę.

+0

Jeszcze jedno - opcja getChangedCells w kolumnie wyboru zawsze zwraca tekst, a nie wartość/Id - czy istnieje sposób obejścia tego? –

Odpowiedz

4

Można użyć opcji dataInit, tak:

{ name: "AccountLookup", index: "AccountLookup", width: 90, 
    editable: true, resizable: true, edittype: "select", formatter: "select", 
    editoptions: { dataInit: function(elem) 
    { 
     $(elem).empty() 
      .append("<option value='1'>Apples</option>") 
      .append("<option value='2'>Oranges</option>"); 
    } } } 

Wystarczy zastąpić statyczne Jabłka & Pomarańcze opcje ze swoimi GetLookupValues ​​function().