Winforms TreeViewがあり、ノード データを SQLite テーブルに保存して、次回アプリケーションを起動したときに TreeView を復元できるようにしたいと考えています。TreeView を使用してほとんどのデスクトップ アプリケーションを操作し、TreeNodes にアタッチされたクラス内のインデックス ポインター フィールドを使用して、ユーザーがノードをクリックしたときにデータベース内の他のテーブルにアクセスします。
私が回避しようとしている問題は、新しい TreeNode が作成されるたびに、TreeView と TreeNode_Table の間で多くの「往復」が発生することです。TreeNodeを作成する前に、次の自動インクリメント主キーがTreeNode_Tableにあることを事前に知っておくとよいでしょう。そうすれば、ノードを作成してツリーに追加し、データを新しい TreeNode_Table 行に 1 回のパスでコピーできます。主キー、ノード レベル、ノード インデックス、およびその他のノードと行の値などの値を同期するための、テーブルと TreeView 間のラウンド トリップはありません。
私は試した:
string strFindLastRowInserted = @"SELECT MAX([id]) FROM [TreeNode_Table];";
var findLastRowInsertedCmd = new SQLiteCommand(strFindLastRowInserted, _cnn);
object resultObj = findLastRowInsertedCmd.ExecuteScalar();
findLastRowInsertedCmd.Dispose();
if( resultObj != null)
NodeTagDataObj.DataPtr = (long)resultObj + 1;
ただし、最近作成されたノード/行の一部が以前に削除されている場合、MAX([id])に 1 を追加すると機能しなくなります。System.Data.Sqliteライブラリを使用してデータ ファイルにアクセスしています。
ご協力ありがとうございました。何か案は?