2012-02-09 14 views
1

グリッドでは、ユーザーが一番下の行にテキストを入力した後、必要に応じて別の行を追加できるように別の行を追加します。グリッドは、ユーザーが必要に応じて拡大します。これはうまくいきますが、ページのリロードとdbからのデータ入力後、addrowdata()関数は既存の行IDを受けず、重複を作成します。 jqg1。既存の行IDを参照し、新しい一意IDを作成する必要があります。したがって、既に5つの行がある場合は、jqg6から始まる可能性があります。予想通り、私はまた、代わりに未定義、同じ結果の)$ .jgrid.randIdを(試してみました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'); 
} 

:ここonCellSelect内の関連するコードです。

おかげ

ライアン

答えて

1

私はエラーは、データベースからのデータでグリッドを埋める部分にあると思います。データベースに保存されたデータには固有のIDがあります。 idはではなく、形式がjqg1、jqg2、...であるため、競合が発生しないはずです。 JSONのidフィールドには、データベースのIDを入力するだけです。

さらにaddRowDatarowidパラメータ(最初のパラメータ)を指定するだけです。この場合、グリッドに追加された行の新しいIDを完全に制御できます。

$.jgrid.randIdのコードは非常に簡単です。任意の負の副作用なしに$.jgrid.guid値はそれが本当にあなたが増加することができます(しかしない減少)必要な場合は1に'jqg'$.jgrid.guid初期化$.jgrid.randId関数として初期化$.jgrid.uidPrefは以下の

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

を行うあります。

+0

ありがとう@Oleg、私はあなたが答えたいと思っていました。実際にはjqg1の値をデータベースに保存していて、グリッドがページの再読み込み時に満たされたときにこれらのIDを使ってグリッドを再作成しています。グリッドに、データベースに保存するユニークなIDを作成したいと思います。この方法では、私はdbに行く必要はありません、誰かが行のクライアント側を追加するたびに、最も魅力的な、増加を見つける。 – krazy

+0

@krazy:私はそれが良いとは思わない。私が知っているすべてのデータベースには、ある種のAutoIncrement整数型が含まれています。たとえば、SQLでは 'int IDENTITY(1,1)NOT NULL'または' int PRIMARY KEY IDENTITY'で列を宣言できます。他の例については、[here](http://www.w3schools.com/sql/sql_autoincrement.asp)を参照してください。 JavaScriptで生成されたIDの使用法として、より安全な方法です。どのデータベースを使用していますか? – Oleg

+0

問題は、一意の行IDを作成することでした。$ .jgrid.randIdは既存の値を調べません。テーブルには複合主キーがあります。私は自分のrowIdを作成します、ありがとう。 – krazy

関連する問題