有没有办法根据需要向 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 是列的 id
您可以通过将“onAddNewRow”侦听器订阅到网格对象来动态添加行,例如单击按钮。正如许多人建议的那样,最好使用dataView 插件与您的数据交互。请注意,您需要将“enableAddRow”选项设置为“true”。
首先,DataView 要求在添加新行时设置唯一的行“id”。计算这一点的最佳方法是使用 dataView.getLength() ,它将为您提供网格中当前存在的行数(我们将用作新行的 id)。DataView addItem 函数需要一个项目对象。所以我们创建一个空的 item 对象并将 id 附加到它上面。
其次,当您添加数据时,您将只关注一个单元格。输入该数据后(通过模糊该单元格),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();
});
我希望这有帮助。干杯!
var newRow = {col1: "col1", col2: "col2"};
var rowData = grid.getData();
rowData.splice(0, 0, newRow);
grid.setData(rowData);
grid.render();
grid.scrollRowIntoView(0, false);
对我来说工作得很好。
除了创建新行之外,我还需要显示它,以便用户可以开始在上面书写。我正在使用分页,所以这就是我所做的:
//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);
您始终可以向网格中添加新行。您需要做的就是将该行的数据对象添加到您的网格数据中。
假设您从数据源创建网格 - myGridData
(这是一个对象数组)。只需将新行对象推送到此数组即可。调用invalidate
网格上的方法。
完毕 :)