1.通用方法。
function creatNewRow(){
//ローダーON
sofia.ui.dispLoader(true);
var $list = $('#gridID');
var rows = $list.jqGrid('getRowData');
var idArray = $.map(rows, function (row, index) { return row.number; });//すべてのID
var id = makeId(idArray);// 新しいIDを生成
var data = { number:id, yosanka:'', kamoku:'', zaigen:'', kingaku:''};// 追加する新しいレコードを作成
var rowid = rows.length + 1;// 新しいグリッドのrowidを決める
$list.jqGrid('addRowData', rowid, data, 'first');// グリッドの最下部にレコードを追加する
var newData= $('#gridID').jqGrid('getRowData');// グリッドの情報を一時保管
$('#gridID').clearGridData(); / グリッドのclear
$('#gridID').jqGrid('setGridParam', {data : newData,});
$('#gridID').trigger('reloadGrid'); //グリッドの更新
/*グリッドの更新
$('#gridYosan')
.clearGridData()
.jqGrid('setGridParam', {
data : newData,
}).trigger('reloadGrid');*/
$list.jqGrid('setSelection',rowid); // 新行の選択
//$list.jqGrid('editCell', rowid, 1, true); // セルのフォーカス
sofia.ui.dispLoader(false);//ローダーOFF
}
//
// 新しいレコードIDを生成する処理
//
var makeId = function(idArray) {
// 新しいレコードのIDを計算する
var id; // ID格納用
if(idArray.length == 0){
id = 1;// グリッドにデータがない場合
}else{
// グリッドのレコード数が1件以上の場合
var idArrayNum = new Array(idArray.length);// 数値へ変換する
for(var i = 0; i<idArray.length; i++){
idArrayNum[i] = Number(idArray[i]);
}
// 昇順ソート
idArrayNum.sort(function(a,b){
if( a < b ) return -1;
if( a > b ) return 1;
return 0;
});
// 空いているIDを使用する
for(var i = 0; i<idArrayNum.length; i++){
if(idArrayNum[i+1] - idArrayNum[i] != 1){
id = idArrayNum[i] + 1;
break;
}
}
}
return id;
}