错误:找不到行 - [TiUITableViewProxy insertRowBefore:]

时间:2013-02-09 06:37:54

标签: titanium tableview appcelerator-mobile

我有一个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);
    }
}

有什么想法吗?

2 个答案:

答案 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);
          }
   }