A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© mzh901024 中级黑马   /  2013-7-22 20:12  /  1084 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

C/S模式中,我要将数据库中查询的数据绑定到treeview控件中,比如,父_ID=0,ID=1的为中国,父_ID=1,ID=2为北京,父_ID=2,ID=3为海淀区等,将其以节点的形式绑定到树形控件中,并进行增,删,改,查,不知怎么做?求指点,谢谢!

6 个回复

倒序浏览
http://www.cmono.net/?post=1073可以查看
回复 使用道具 举报
如果是数据库设计可以用迭代,但绑定这个控件没试过
回复 使用道具 举报
哦,谢谢
回复 使用道具 举报
本帖最后由 sxdxgzr@126.com 于 2013-7-23 12:53 编辑

数据Teeview 有个属性Nodes(存储树的所有顶级节点,第一个元素又对应TopNode),这个集合里面的元素类型为treenode,treenode也有个Nodes属性,这个存储该节点的子节点。
楼主首先在初始化treeview的某个时机(自己选择),取出所有数据,根据父子关系递归创建treenode实例,并将子节点加入到父节点集合里。
增删改的话根据 操作的节点先修改数据库的  数据,在修改对应的树节点。


爪机实在不方便,楼主若还不清楚,回复下,我直接上代码。
回复 使用道具 举报
给点代码,谢谢
回复 使用道具 举报
本帖最后由 sxdxgzr@126.com 于 2013-7-25 00:04 编辑

1新建一个windows应用程序
2form上拖一个treeview
3代码
  1. using System;
  2. using System.Linq;
  3. using System.Windows.Forms;

  4. namespace TreeviewSample
  5. {
  6.     public partial class Form1 : Form
  7.     {
  8.         public Form1()
  9.         {
  10.             InitializeComponent();
  11.             Load += Form1_Load;
  12.             treeView1.BeforeExpand += treeView1_BeforeExpand;
  13.         }

  14.         /// <summary>
  15.         /// 点击节点上的"+"号是触发,这个时机可以加载子节点(便于分级加载数据)(当然也可以在对treeview扩展重写BeforeExpand 并定义事件 发出事件 便于注册者主动添加节点)
  16.         /// </summary>
  17.         /// <param name="sender"></param>
  18.         /// <param name="e"></param>
  19.         void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
  20.         {
  21.             TreeNodeBase curNode= (TreeNodeBase)e.Node;

  22.             //加载节点前清除所有节点 (懒得控制 实际可不这么做)
  23.             curNode.Nodes.Clear();

  24.             //加载子节点 从数据库取当前节点的子(不含孙)同时也要取回是否有子信息便于设置Children属性  这里不取了 直接新建一个
  25.             var subode = new TreeNodeBase { NodeId = "01", Text = @"香港", Name = "subNode", Children=true };

  26.          
  27.             curNode.Nodes.Add(subode);
  28.         }

  29.         void Form1_Load(object sender, EventArgs e)
  30.         {
  31.             //添加根节点
  32.             TreeNodeBase rootNode = new TreeNodeBase {NodeId = "01", Text = @"中国", Name = "rootNode", Children = true};
  33.             //添加根节点
  34.             treeView1.Nodes.Add(rootNode);
  35.             
  36.             //选中根节点
  37.             treeView1.SelectedNode = rootNode;
  38.         }
  39.     }


  40.     /// <summary>
  41.     /// 树节点基类(简单扩展下)
  42.     /// </summary>
  43.     public class TreeNodeBase : TreeNode
  44.     {
  45.         /// <summary>
  46.         /// 节点是否有子
  47.         /// </summary>
  48.         public bool Children
  49.         {
  50.             get
  51.             {
  52.                 if (Nodes.Count == 0)return false;
  53.                 return true;
  54.             }
  55.             set
  56.             {
  57.                 if (value)
  58.                 {
  59.                     if (Nodes.Count == 0)
  60.                     {
  61.                         var node = new TreeNodeBase()
  62.                         {
  63.                             Name = "muteNode",
  64.                         };
  65.                         Nodes.Add(node);
  66.                     }
  67.                 }
  68.                 if (value == false)
  69.                 {
  70.                     Nodes.Clear();
  71.                 }
  72.             }
  73.         }

  74.         /// <summary>
  75.         /// 节点对象的ID
  76.         /// </summary>
  77.         public string NodeId { get; set; }

  78.         /// <summary>
  79.         /// 父节点ID
  80.         /// </summary>
  81.         public string ParentNodeId
  82.         {
  83.             get
  84.             {
  85.                 return ((TreeNodeBase)Parent).NodeId;
  86.             }
  87.         }


  88.         #region 节点基本操作  (完成数据库操作并同步界面显示)
  89.         
  90.       

  91.         /// <summary>
  92.         /// 新增节点
  93.         /// </summary>
  94.         public void AddSubNode()
  95.         {
  96.             //1数据库新增节点

  97.             //2界面新增节点;

  98.         }

  99.         /// <summary>
  100.         /// 移除节点
  101.         /// </summary>
  102.         public void RemoveNode()
  103.         {
  104.             //1数据库移除节点

  105.             //2界面移除节点
  106.         }

  107.         /// <summary>
  108.         /// 更新节点
  109.         /// </summary>
  110.         public void UpdateNode()
  111.         {
  112.             //1数据库更新节点

  113.             //2界面更新节点
  114.         }

  115.         #endregion
  116.     }

  117.   
  118. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马