Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# &引用;“有约束力”;去看树?_C#_.net_Winforms_Sqlite_Ado.net - Fatal编程技术网

C# &引用;“有约束力”;去看树?

C# &引用;“有约束力”;去看树?,c#,.net,winforms,sqlite,ado.net,C#,.net,Winforms,Sqlite,Ado.net,我正在尝试为我的IRC客户端构建服务器/网络设置系统。由于网络和服务器的关系性质,我选择使用SQLite来存储所有内容 我的第一步是创建设置对话框,这与您可能期望的一样;一个树视图,用于保存网络和服务器,并在侧面留出一个空间来编辑它们的设置 我对ADO.NET有一点经验,但只是基本的选择和更新,没有任何关系所以我的问题是如何将一行与树节点关联。我已经为服务器和网络定制了树节点对象,并且可以很好地处理一些手动输入的数据 所以我想我不需要“绑定”本身,我只需要将数据加载到TreeView中,并能够轻

我正在尝试为我的IRC客户端构建服务器/网络设置系统。由于网络和服务器的关系性质,我选择使用SQLite来存储所有内容

我的第一步是创建设置对话框,这与您可能期望的一样;一个树视图,用于保存网络和服务器,并在侧面留出一个空间来编辑它们的设置

我对ADO.NET有一点经验,但只是基本的选择和更新,没有任何关系所以我的问题是如何将一行与树节点关联。我已经为服务器和网络定制了树节点对象,并且可以很好地处理一些手动输入的数据


所以我想我不需要“绑定”本身,我只需要将数据加载到TreeView中,并能够轻松地更新设置。

在我们的项目中,我们通常使用TreeNode的Tag属性将一行与一个TreeNode相关联,并在不绑定的情况下手动将数据加载到TreeView中。

填充TreeView时的主要问题是,在每个节点展开时,是完全加载所有节点,还是实现某种延迟加载方法

只有当节点数少于500个时,填充整个树才能达到可接受的效果,并且节点数不会增加。否则,延迟加载方法是最好的

最简单的方法是在BeforeExpand事件中填充节点的子节点。但是,树状视图不会显示+/-表示节点有子节点,除非您实际向其添加子节点。因此,在填充父节点时,应该检查逻辑项(数据行)是否有子节点,如果有,则添加一个虚拟节点

我发现从TreeNode继承自定义类是定义虚拟节点的最简单方法之一。然后可以使用Is运算符在BeforeExpand()中检查它

然后,当用户展开父节点时,在BeforeExpand事件中,检查是否存在虚拟节点,是否存在删除它,然后填充实际节点。对于这些节点中的每个节点,检查子节点并填充标记属性和虚拟节点(如果需要)

将每个节点的标记属性设置为某种有意义的对象/数据。这将允许您在需要时轻松填充子节点。请注意,它属于object类型,需要时需要将其正确转换为实际的数据类型。

我没有考虑过您所说的“延迟加载”,谢谢。关于Tag属性,我已经有了自定义的TreeNode对象,所以这不是真的需要。这样,我就可以很容易地知道单击了什么,以及哪些文本框需要显示在表单的另一侧。在db方面,我仍然不确定我会按照您的建议将Tag属性设置为什么。