我有一个tableview,其中包含从sqlite获取的数据。我可以通过将编辑设置为true来删除记录。
我想在删除行之前检查一些条件。如果条件为true,则删除该行,但是当条件为false时,我收到以下错误:
找不到索引的行。 in - [TiUITableViewProxy insertRowBefore:](TiUITableViewProxy.m:500)
table.addEventListener('delete', function(e) {
if(some condition){
db.execute("DELETE FROM tbltest WHERE rowid ='" + e.source.rowid + "'");
} else {
alert('Deletion is not possible');
table.insertRowBefore(e.index, e.row);
}
}
有什么想法吗?
答案 0 :(得分:1)
我感觉表索引没有刷新。因此,当你在旧行索引下查找一行时,它认为那里什么都没有。
试试这个:
table.addEventListener('delete', function(e) {
table.setData(table.data);
if(some condition){
db.execute("DELETE FROM tbltest WHERE rowid ='" + e.source.rowid + "'");
} else {
alert('Deletion is not possible');
table.insertRowBefore(e.index, e.row);
table.setData(table.data);
}
}
虽然我不确定你在执行setData后不会松开电子邮件。 另一个注意事项是,如果你删除最后一行,这将不起作用。因此,检查行的索引,与行长度进行比较,如果它更大,则只需追加行。所以代码变成了
table.addEventListener('delete', function(e) {
table.setData(table.data);
if(some condition){
db.execute("DELETE FROM tbltest WHERE rowid ='" + e.source.rowid + "'");
} else {
// below will only work if you have 1 or no explicit sections in the table if you have more, you'll need to iterate through them
if (e.index >= table.data[0].rows.length) {
table.appendRow(e.row);
} else {
table.insertRowBefore(e.index, e.row);
}
table.setData(table.data);
}
我没有对此进行测试,如果它不起作用,希望它至少会让你走上正轨:)
答案 1 :(得分:1)
table.addEventListener('delete', function(e) {
try{
db.execute("DELETE FROM tbltest WHERE rowid ='" + e.source.rowid + "'");
}
catch(e) {
alert('Deletion error' + e);
table.insertRowBefore(e.index, e.row);
}
}