C#:如何把数据库中的数据绑定到Treeview中?

cangxi_liu 2016-06-12 03:05:15
数据库中有一张表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中去?请给出代码。
...全文
276 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sp1234_maJia 2016-06-12
  • 打赏
  • 举报
回复
改一下: node.ChildNodes.Add(n);
  • 打赏
  • 举报
回复
当让你也可以不按层递归,而是按照节点递归。例如
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);
    }
}
我这里是随便写的代码,不一定没有语法错误。你应该理解其算法逻辑,使用其编程模式(而不是代码)。
  • 打赏
  • 举报
回复
上面的 tr 就代表目标 TreeView 对象。 你可以看到,在“扩展行政区树”过程中,跟 tr 毫无关系。所以不要把关注点死抠在这个 TreeView 对象上面,而应该把关注点放到 TreeNodeCollection 上面。
  • 打赏
  • 举报
回复
在已经知道 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。这是一个左子树深度优先递归的过程。
龍过鸡年 2016-06-12
  • 打赏
  • 举报
回复
哟,这个只能写代码来加载了,不过有个取巧的方法 就是先加载 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 操作数据了。
cangxi_liu 2016-06-12
  • 打赏
  • 举报
回复
引用 1 楼 qqamoon 的回复:
wpf or winform ?
winform
cangxi_liu 2016-06-12
  • 打赏
  • 举报
回复
引用 2 楼 ck7193 的回复:
http://www.cnblogs.com/xiaofengfeng/archive/2013/07/14/3189634.html
crystal_lz 2016-06-12
  • 打赏
  • 举报
回复

private void LoadTree(TreeNodeCollection tnc,int nParent){
    foreach(var v in "select  * from tb_xxx where a_parentcode = nParent"){
        TreeNode node = new TreeNode(v.a_name);
        tnc.Nodes.Add(node);
        LoadTree(node.Nodes,v.a_code);//递归节点
    }
}
//========
this.LoadTree(treeView.Nodes,"");
空白桑 2016-06-12
  • 打赏
  • 举报
回复
http://www.cnblogs.com/xiaofengfeng/archive/2013/07/14/3189634.html
龍过鸡年 2016-06-12
  • 打赏
  • 举报
回复
wpf or winform ?

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧