0

sqlite から取得したデータを含むテーブルビューがあります。編集をtrueに設定することで、レコードを削除できます。

行を削除する前に、いくつかの条件を確認したい。条件が真の場合、行は削除されますが、条件が偽の場合、次のエラーが発生します。

インデックスの行が見つかりません。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);
    }
}

何か案は?

4

2 に答える 2

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);
          }
   }
于 2013-02-11T05:20:37.570 に答える
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 を実行した後に e.row が失われないかどうかはわかりませんが。もう1つの注意点は、最後の行を削除している場合、これは機能しないということです. したがって、行のインデックスを確認し、行の長さと比較して、それが大きい場合は行を追加します。したがって、コードは次のようになります

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

私はこれをテストしていませんが、うまくいかない場合は、少なくとも正しい軌道に乗ることを願っています:)

于 2013-02-10T22:25:18.620 に答える