オンデマンドで slickgrid に新しい行を追加する方法はありますか? たとえば、クリックすると新しい行が表示されるボタンをページに配置します。
5 に答える
これは、dataView.addItem(params)を使用して簡単に実行でき、paramsをパラメーターに置き換えるだけです。
function addNewRow(){
var item = { "id": "new_" + (Math.round(Math.random() * 10000)), "Controller": tempcont, "SrNo1": tempsrno };
dataView.addItem(item);
}
ここで、id、Controller、SrNo1はcolunmのidです。
「onAddNewRow」リスナーをグリッド オブジェクトにサブスクライブすることにより、ボタン クリックなどで行を動的に追加できます。多くの人が示唆しているように、dataView プラグインを使用してデータとやり取りすることをお勧めします。「enableAddRow」オプションを「true」に設定する必要があることに注意してください。
まず、DataView では、新しい行を追加するときに一意の行「id」を設定する必要があります。これを計算する最良の方法は、dataView.getLength() を使用して、現在グリッドに存在する行数を取得することです (これを新しい行の ID として使用します)。DataView の addItem 関数には、アイテム オブジェクトが必要です。そのため、空のアイテム オブジェクトを作成し、id を追加します。
次に、データを追加するときに 1 つのセルのみにフォーカスします。そのデータを入力した後 (そのセルをぼかして)、DataView は、行の残りのセルのいずれにもデータを入力していないことに気付き (もちろん)、それらの値をデフォルトで「未定義」にします。これは実際には望ましい効果ではありません。したがって、明示的に設定した列をループして、項目オブジェクトに値 "" (空の文字列) を追加することができます。
第三に、すべてのセルを空白にしたくありません。実際には、元のセルに入力されたデータが表示されるようにします。そのデータがあるので、最後に設定して、以前に設定した "" (空の文字列) の値を上書きします。
最後に、これらの変更がすべて表示されるようにグリッドを更新します。
grid.onAddNewRow.subscribe(function (e, args) {
var input = args.item;
var col = Object.keys(input)[0]
var cellVal = input[Object.keys(input)[0]]
// firstly
var item = {};
item.id = dataView.getLength();
// secondly
$.each(columns, function(count, value) {
colName = value.name
console.log(colName)
item[colName] = ""
})
// thirdly
item[col] = cellVal
dataView.addItem(item);
// lastly
grid.invalidateRows(args.rows);
grid.updateRowCount();
grid.render();
grid.resizeCanvas();
});
これが役立つことを願っています。乾杯!
新しい行を作成するだけでなく、ユーザーが書き込みを開始できるように、行を表示する必要がありました。私はページネーションを使用しているので、これが私がしたことです:
//get pagination info
var pageInfo = dataView.getPagingInfo();
//add new row
dataView.addItem({id: pageInfo.totalRows});
//got to last page
dataView.setPagingOptions({pageNum: pageInfo.totalPages});
//got to first cell of new row
var aux = totalRows/ pageInfo.pageSize;
var row = Math.round((aux - Math.floor(aux)) * pageInfo.pageSize, 0);
grid.gotoCell(row, 0 ,true);
ページ付けを使用する前に、これが必要でした。
var newId = dataView.getLength();
dataView.addItem({id: newId});
grid.gotoCell(newId, 0 ,true);
var newRow = {col1: "col1", col2: "col2"};
var rowData = grid.getData();
rowData.splice(0, 0, newRow);
grid.setData(rowData);
grid.render();
grid.scrollRowIntoView(0, false);
私のためにうまく働いています。
いつでも新しい行をグリッドに追加できます。行のデータ オブジェクトをグリッド データに追加するだけです。
myGridData
データ ソース(オブジェクトの配列)からグリッドを作成するとします。新しい行オブジェクトをこの配列にプッシュするだけです。invalidate
グリッド でメソッドを呼び出します。
終わり :)