2012-02-09 95 views
1

在我的網格上,用戶在最下面一行輸入文本後,我添加另一行,以便他們可以根據需要填寫另一行。網格將根據用戶的需要增長。這個工作正常,但是在頁面重新加載並從數據庫填充後,addrowdata()函數不會兌現​​現有的行ID並創建重複項,從1開始,例如1。 jqg1。它應該查看現有的行ID並創建新的唯一ID。所以如果我已經有5行,它可能會從jqg6開始。這裏是內部onCellSelect相關代碼:jqgrid randId()在頁面重新加載後產生重複


var records = jQuery("#table-1").jqGrid('getGridParam', 'records'); 
var lastRowId = jQuery("#table-1").jqGrid('getDataIDs')[records - 1]; 

if (lastRowId == id) 
{ 
    jQuery('#table-1').addRowData(undefined, {}, 'last'); 
} 

我自己也嘗試$ .jgrid.randId(),而不是不確定的,相同的結果符合市場預期。

感謝

瑞安

回答

1

我認爲錯誤是在您填寫電網與數據庫中的數據部分。保存在數據庫中的數據具有唯一的ID。 ID爲而不是,形式爲jqg1,jqg2,...所以如果應該沒有衝突。您應該只填寫JSON的id字段與數據庫中的id。

另外一種可能性是,您只需指定addRowDatarowid參數(第一個參數)即可。在這種情況下,您將完全控制網格中添加的行的新ID。

代碼$.jgrid.randId功能很簡單。有$.jgrid.uidPref初始化爲'jqg'$.jgrid.guid初始化爲1。$.jgrid.randId功能做以下

$.jgrid.randId = function (prefix) { 
    return (prefix? prefix: $.jgrid.uidPref) + ($.jgrid.guid++); 
} 

如果真正需要可以增加(但不減少)的$.jgrid.guid值沒有任何負面的副作用。

+0

謝謝@Oleg,我希望你能回答。實際上,我將jqg1值保存到數據庫中,並且在頁面重新加載時填充網格時使用這些id重新填充網格。我想要網格創建我將保存在數據庫中的唯一ID。這樣我就不必去數據庫了,每次有人添加一行客戶端時,找到最佳值,增加值。 – krazy 2012-02-10 10:33:49

+0

@ krazy:我覺得不好。我知道的所有數據庫都包含某種AutoIncrement整數類型。例如,在SQL中,您可以使用「int IDENTITY(1,1)NOT NULL」或「int PRIMARY KEY IDENTITY」來聲明列。有關更多示例,請參見[這裏](http://www.w3schools.com/sql/sql_autoincrement.asp)。使用JavaScript中生成的ids更安全。你使用哪個數據庫? – Oleg 2012-02-10 14:04:16

+0

問題是關於創建一個唯一的行ID,我現在明白$ .jgrid.randId沒有看現有的值。該表具有複合主鍵。我會創建自己的rowId,謝謝。 – krazy 2012-02-10 15:25:34

相關問題