2013-04-11 44 views
0

我已經定義了一個選擇在jqGrid的表如下:獲取的「價值」字段中的jqGrid的選擇

{name: 'station', index: 'station', editable: true, width: 60, 
    edittype:"select", defaultValue:"", 
    editoptions:{ 
     dataUrl: "getStationList" 
    }, 
    editrules: { required: true } 
}, 

的getStationList返回類似:

<select> 
<option value="id1">Station1</option> 
<option value="id2">Station2</option> 
</select> 

在當前的定義,第一次顯示組合時,Station的列表很好地顯示(Station1,Station2,...),當選擇Station1時,JSON包含「id1」。 但是當表格更新時,它會在選擇的組合中顯示「id1」,而不是保持顯示電臺的列表。

這是一個錯誤,或者我錯過了一些配置選項? (可能是最後一個)

謝謝!

回答

1

我想你在填寫時已經有問題了。如果您想使用ID而不是名稱,則應另外使用formatter: "select"edittype:'select'(請參閱the documentation)。在這種情況下,在使用數據填充網格時,您將不得不在網格中放置ID。我的意思是,jqGrid的輸入數據應該包含id1id2而不是"Station1""Station2"。只有在這種情況下,您才能使用dataUrl,其中提供<option value="id1">Station1</option>。接下來的問題是:您必須設置editoptions.valueformatoptions.value而不是使用dataUrl: "getStationList"。所以formatter: "select"的使用比較複雜。可以做什麼是將{"id1":"Station1", "id2":"Station2"}等數據作爲主網格數據的一部分。可以將{stations: {"id1":"Station1", "id2":"Station2"}}作爲userdata的一部分JSON輸入(參見the documentation)。在beforeProcessing回調內可以設置formatoptions.value根據userdata.stations。實際上,人們不僅在編輯數據期間,而且在網格的每次填充期間都會向getStationList發出請求。

我個人更喜歡使用沒有formatter: "select"和使用形式

<select> 
    <option value="Station1">Station1</option> 
    <option value="Station2">Station2</option> 
</select> 

在客戶端代碼將「知道」任何關於數據的表示的實施細則的方式進行選擇。在網格編輯過程中,將填入數據「Station1」和「Station2」,併發送相同的數據。在需要的時候,另一端的服務器將通過名稱獲得ID。通常,如果我創建「查找」表Stations包含「ID」和列「姓名」我會成立

CONSTRAINT UC_Stations_Name UNIQUE NONCLUSTERED (Name ASC) 

因此,有其中可以按名稱獲取標識表唯一索引。所有具有Name的Update語句都與Id一樣快。我在所有內部SQL語句中使用Id,但只將Name發送到外部源。在我不需要使用formatter: "select"的方式。

+0

我看到它並不像我想的那麼簡單。我幾乎找不到這方面的線索。無論如何,我會嘗試一下你提到的beforeProcessing方法。非常感謝!! – rubenafo 2013-04-11 13:45:58

+0

@figurebelow:不客氣! – Oleg 2013-04-11 14:37:27