我有一个Winforms TreeView,我希望将节点数据存储到 SQLite 表中,以便下次应用程序启动时可以恢复 TreeView。我使用 TreeView 来驱动大多数桌面应用程序,并在用户单击节点时使用附加到 TreeNodes 的类中的索引指针字段来访问数据库中的其他表。
我试图避免的问题是每次创建新的 TreeNode 时 TreeView 和 TreeNode_Table 之间的大量“往返”。最好在创建TreeNode之前提前知道 TreeNode_Table 中的下一个自动增量主键是什么。这样我就可以创建节点并将其添加到树中,然后将数据一次性复制到新的 TreeNode_Table 行中。表和 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])添加一个会失败。我正在使用System.Data.Sqlite库来访问数据文件。
感谢您的帮助。有任何想法吗?