2011-04-03 38 views
5

我在我的新項目中使用jqgrid。 在特定情況下,我需要在網格中使用select元素。沒問題。jqgrid edittype從數據中選擇加載值

我定義colModel和例如像(來自維基)

colModel : [ 
    ... 
{name:'myname', edittype:'select', editoptions:{value:{1:'One',2:'Two'}} }, 
    ... 
] 

但現在當我加載我的數據我寧願列「MYNAME」爲包含值1 此次榮獲」列t爲我工作,而不得不包含價值「一」。

問題在於select元素的文本部分在我的情況下本地化在動態生成colModel的業務層中。另外,通過EF 4生成數據的實體的數據類型可能不是字符串。然後我必須找到正確的本地化文本並操縱數據結果,以便列「myname」不包含通常情況下的整數,而是包含本地化文本的字符串。

沒有選擇可以使用,以便當數據包含與選擇列表中的選項相匹配的值時,網格會找到該選項並顯示文本。 現在,網格呈現爲文本的值,當我點擊編輯時,它首先找到匹配的選項並呈現文本。當我撤消編輯時,它會返回以再次顯示值。

我開始想到一個解決方案,這就是我想出的。如果你知道一個更好的解決方案,或者如果你知道有內置選項,請不要猶豫,回答。 否則這裏是我做過什麼:

loadComplete: function (data) { 
        var colModel = grid.getGridParam('colModel'); 
        $.each(colModel, function (index, col) { 
         if (col.edittype === 'select') { 
          $.each(grid.getDataIDs(), function (index, id) { 
           var row = grid.getRowData(id); 
           var value = row[col.name]; 
           var editoptions = col.editoptions.value; 
           var startText = editoptions.indexOf(value + ':') + (value + ':').length; 
           var endText = editoptions.indexOf(';', startText); 
           if (endText === -1) { endText = editoptions.length; } 
           var text = editoptions.substring(startText, endText); 
           row[col.name] = text; 
           grid.setRowData(id, row); 
          }); 
         } 
        }); 
       } 

它的工作原理,如果沒有人來了一個更好的辦法,我會離開它這樣。

回答

6

您應該在列的定義中包含其他formatter:'select'選項。有關更多詳細信息,請參閱the documentation

+1

工程很棒。我搜查了文檔和谷歌,但我想我沒有提出正確的搜索詞。 在談論格式化程序選項時。現在我在服務器上格式化時間列(HH:mm),因爲我沒有找到任何其他方式。設置格式化程序:「日期」將我的DateTime格式化爲yyyy-mm-dd。有沒有更好的方法在網格中做到這一點?我可以看到面罩選項,但我不明白如何使用它。好像我想要類似ShortTime的東西。可能嗎? – John 2011-04-03 11:35:01

+0

您節省了我的一天。 – 2015-10-13 10:17:44

+0

@SergeyShabanov:不客氣!我很高興我的一些舊的答案仍然有幫助。 – Oleg 2015-10-13 10:18:43