我想在模态窗口中的数据表表中找到一个特定的行值。 我正在查看https://datatables.net/reference/type/row-selector,但据我所知,这一切都基于选择器或内部ID。 在我的情况下,我有2列,我希望能够在ajax请求后查找特定行以更新记录。
success: function (data) {
if (data.status_id > 0) {
alert(data.info);
} else {
alert(data.info);
}
contractsTable.row.add(dataJSON).draw(false);
}
修改
现在我的代码 - 我已经构建了自己独特的rowid并使用了selector by id
检索数据对象
...
var d = datatable.row(this).data();
... set form values and so on
保存并刷新数据表
$('#contractEditSave').on('click', function (e) {
dataJSON = {
id: $('#contractEditForm').data('contractid'),
member_id: $('#contractEditForm').data('memberid'),
member_name: $('#contractEditModalTitle').text(),
box_id: $('#contractBox').val(),
name: $('#contractName').val(),
description: $('#contractDescription').val(),
start: $('#contractStart').val(),
end: $('#contractEnd').val(),
amount: $('#contractAmount').val(),
unit: $('#contractUnit').val(),
max: 1
};
$.ajax({
type: 'POST',
url: '/save',
data: JSON.stringify(dataJSON),
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (data) {
if (data.status_id == 0)
datatable.row('#' + dataJSON.id).data(dataJSON); //if update
...
} else {
datatable.row.add(dataJSON).draw(false); //if insert
...
}
$("#contractEditModal").modal('hide');
}
});
});
答案 0 :(得分:5)
您可以使用fnFindCellRowIndexes
查找包含特定列中某些数据的行索引。
然后,您可以使用cell().data()
API方法更新单元格。
<Row>
<Cell ss:StyleID="s62"><Data ss:Type="DateTime"><% if objrs("DateCol") <> #01/01/1902# then Response.write fncFormatDateXML(objrs("DateCol")) else response.write "" end if %></Data></Cell>
</Row>
请注意,除了jQuery DataTables CSS / JS文件外,还需要包含var table = $('#example').DataTable();
var rowId = $('#example').dataTable()
.fnFindCellRowIndexes('Angelica Ramos', 0);
table
.cell(rowId, 0)
.data('Angelica Ramos (UPDATED)')
.draw(false);
。
请参阅this jsFiddle以获取代码和演示。
答案 1 :(得分:0)
我发现fnFindCellRowIndexes插件的运行速度令人难以置信,因为它在每个单元格上都调用fnGetData,这本身就是一个可怕的CPU。答案实际上要简单得多,运行速度要快几个数量级。每列或整个表的data()在您请求时已按排序后的列进行排序。因此,从字面上看,您要做的就是请求column(c).data()并遍历该数组以查找所需内容,索引将与当前排序的行号匹配。在Typescript中,基本上就像这样:
public findRows(s:string,col:number):number[] {
let r:number[] = [];
let dat:any = $('#example').DataTable().column(col).data();
let len:number = dat.length;
for (let k=0;k < len;k++) {
if ((<string>dat[k]).toLowerCase().includes(s.toLowerCase())) r.push(k);
}
return r;
}