TreeView 中的多表数据绑定





2.00/5 (8投票s)
此代码将演示在 TreeView 中的数据绑定。
引言
在撰写本文时,标准的 Windows Forms .NET TreeView
控件不支持像 ASP.NET TreeView
控件那样的数据绑定概念。因此,我们只能自己编写解决方案。此解决方案提供了一种标准化的方法,可以将数据绑定与 Windows Forms .NET TreeView
控件一起使用。此功能将使您能够快速开发出用户友好的方法来创建和查看复杂的数据信息。该解决方案包括数据绑定实现以及以下设计模式:外观模式、代理模式、单例模式。它还包括自定义的“规则”类,以便开发人员在设计时能够派生主键和外键数据点。这对于在 TreeView
发生更改时调整底层数据集至关重要。更新也在单独的异步线程上执行。我想提到的最后一项是,此类支持两个表数据集,一个主键表和一个外键表。
要求
以下是最初的需求
- 将
DataSet
绑定到TreeView
,并将结果保存回 Microsoft Access 数据库。 - 设计解决方案,使其易于在不同的解决方案中重用该类。
- 将尽可能多的绑定逻辑封装在自定义解决方案中,并将其对 UI 开发人员隐藏。
- UI 开发人员几乎不需要编写任何代码来使
TreeView
与其下的DataSet
保持同步。 - 提供一个示例,用于删除
TreeView
中的节点(通过右键单击上下文菜单),并使该删除操作自动反映在DataSet
中。 - 提供一个示例,用于编辑
TreeView
中的节点(通过右键单击上下文菜单),并使Text
属性更改自动反映在DataSet
中。 - 提供一个示例,用于在
TreeView
中插入节点(通过右键单击上下文菜单),并使新节点自动反映在DataSet
中。 - 支持在同一个
TreeView
内拖放TreeNode
分支,并使关系自动反映在DataSet
中。 - 支持跨多个
TreeView
控件拖放TreeNode
分支,并使关系自动反映在目标DataSet
以及源DataSet
中。 - 提供一个示例,用于接受和拒绝对同一个
TreeView
控件所做的更改,使用户能够撤消其更改。 - 当将
TreeNode
分支拖放到目标TreeView
上时,自动将更改提交到源和目标DataSet
。
使用代码
附件中包含的 DataTreeView
允许在控件中重新排序 TreeNode
。下面是 NudgeUp
方法的一个示例
Public Sub NudgeUp(ByVal node As TreeNode)
Dim NewIndex As Integer = 0
Dim NodeClone As TreeNode = Nothing
If node.Parent Is Nothing Then Exit Sub
Try
If node Is Nothing Then Return
If node.Index = 0 Then Return
NewIndex = node.Index - 1
NodeClone = CType(node.Clone(), TreeNode)
node.Parent.Nodes.Insert(NewIndex, NodeClone)
node.Parent.Nodes.Remove(node)
ReOrderSiblings(NodeClone)
NodeClone.TreeView.SelectedNode = NodeClone
Catch ex As Exception
Throw New Exception("Error occured: NudgeUp")
End Try
End Sub 'NudgeUp
下面简要描述了 UI 开发人员如何使用外观设计模式删除行。
Private Sub OnDeleteNode(ByVal e As DataTreeView.EditType, ByVal ID As Integer)
Try
Select Case e
Case DataTreeView.EditType.Foreign
Dim facade As New Database.CarFacade
facade.DeleteCar(ID)
Case DataTreeView.EditType.Primary
Dim facade As New Database.DealerFacade
facade.DeleteDealer(ID)
End Select
Catch ex As Exception
End Try
End Sub
其他贡献者
- EggHeadCafe.com (Robbe D. Morris) TreeView - Windows Forms .NET 中的数据绑定和拖放
历史
- 1.0.0.0:初始版本(2006年4月9日)
- 1.0.0.1:次要更改(2006年4月9日)