C#:怎么样把数据库中的数据绑定到Treeview中

.Net技术 码拜 8年前 (2016-03-02) 1810次浏览
数据库中有一张表TB_area,该表有3个字段,分别是A_code,A_Name,A_ParentCode,数据如下:
A_code                        A_Name       A_ParentCode
5108                             广元市
510824                         苍溪县           5108
510823                         剑阁县           5108
510824100                   陵江镇           510824
510824101                   云峰镇           510824
510824100003             解放路社区    510824100
510824101001             云峰社区        510824101
怎么样显示到Treeview中去?请给出代码。
解决方案

10

哟,这个只能写代码来加载了,不过有个取巧的方法
就是先加载 parentcode 为空或null 的行,也就是顶层数据,
然后在 Node 被 select 之后获取其 chrldren
建议你定义一个类,将类映射为数据库
可以参考 system.data.linq 得 datacontext

[Table("dbo.TB_area"]
public class Area {
    [Column("A_code")] public int Code { get; set; }
    [Column("A_Name")] public string Name { get; set; }
    [Column(" A_ParentCode")] public int? ParentCode { get; set; }
}
// 获取数据 在 form 中的代码
// 全局变量
List<Area> areas;
// init or form load
using(var dc = new System.Data.Linq.DataContext("连接字符串")) {
    areas = dc.GetTable<Area>().ToList();
}
// 接下来你就可以使用 linq 操作数据了。

10

在已经知道 TreeView 对象之后,要加载其 Nodes,通常这包括两个步骤:
1. 首先查询到你要显示的树的顶层数据。例如一棵树的业务逻辑是要显示地址:“常德市永明街130号”这个地址所在的“省市县街”的行政树,那么你搜先要从这个地址找到所在的省。
2. 然后进行自顶向下的递归操作。例如

var node = new TreeNode { Text = "省", Value = id };
tr.Nodes.Add(node);
扩展行政区树(tr.Nodes);
private void 扩展行政区树(TreeNodeCollection treeNodeCollection)
{
    foreach (TreeNode n in treeNodeCollection)
    {
        var parentId = n.Value;
        foreach (行政区 x in 查询某行政区下属的行政区id列表(parentId))
        {
            var node = new TreeNode { Text = x.名称, Value = x.id };
            n.ChildNodes.Add(node);
        }
        扩展行政区树(n.ChildNodes);
    }
}

对于某个树节点下面的每一个节点n,首先加载下一层节点,然后递归这个节点n。这是一个左子树深度优先递归的过程。

10

当让你也可以不按层递归,而是按照节点递归。例如

var node = new TreeNode { Text = "省", Value = id };
tr.Nodes.Add(node);
扩展行政区树(node);
private void 扩展行政区树(TreeNode node)
{
    var parentId = node.Value;
    foreach (行政区 x in 查询某行政区下属的行政区列表(parentId))
    {
        var n = new TreeNode { Text = x.名称, Value = x.id };
        node.ChildNodes.Add(node);
        扩展行政区树(n);
    }
}

本人这里是随便写的代码,不一定没有语法错误。你应该理解其算法逻辑,使用其编程模式(而不是代码)。

10

改一下:
node.ChildNodes.Add(n);

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C#:怎么样把数据库中的数据绑定到Treeview中
喜欢 (0)
[1034331897@qq.com]
分享 (0)