• Tabel数据转换成TreeView


    详解:

    方法

     
    public void GetTreeViewModel() { CityModle rtn = null; // ID string id; //名称 string name; //父节点全名 string pname; //父节点ID string pid; string sql = "SELECT [id],[name],[pid],[pname] FROM [Test].[dbo].[city]"; SqlDataReader dr = null; dr = DBHelper.GetReader(sql);
    Dictionary<string, CityModle> cityDic = new Dictionary<string, CityModle>(); //遍历数据源 整理数据并放在 Dictionary中 while (dr.Read()) { id = dr["id"].ToString(); name = dr["name"].ToString(); pid = dr["pid"].ToString(); pname = dr["pname"].ToString(); CityModle city = new CityModle(id, name, pid, pname); cityDic.Add(id, city); } foreach (KeyValuePair<string, CityModle> tmp in cityDic) //遍历dictionary要使用KeyValuePair. 将Node链接成Tree. { if (cityDic.ContainsKey(tmp.Value.Pid)) { cityDic[tmp.Value.Pid].Add(tmp.Value); } if (tmp.Value.Pid == "10") //判断根节点,要根据实际的数据判断 { rtn = tmp.Value; } } this.treeView1.Nodes.Add(rtn.TreeNode); }
    //使用到的Model
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace Test
    {
        class CityModle
        {
            private string id;
            private string name;
            private string pid;
            private string pname;
            private TreeNode node;
    
            public TreeNode TreeNode
            {
                get
                {
                    return this.node;
                }
            }
            public string Id
            {
                get { return id; }
                set { id = value; }
            }
    
            public string Name
            {
                get { return name; }
                set { name = value; }
            }
    
            public string Pid
            {
                get { return pid; }
                set { pid = value; }
            } 
    
            public string Pname
            {
                get { return pname; }
                set { pname = value; }
            }
    
           //构造函数
            public CityModle(string id, string name, string pid ,string pname)
            {
                this.Id = id;
                this.Name = name;
                this.Pid = pid;
                this.Pname = pname;
                this.node = new TreeNode(); 
                this.node.Text = this.name;
            }
            public bool Add(CityModle item)  //主要方法
            {
                if (this.Id.Equals(item.Pid))
                {
                    this.node.Nodes.Add(item.TreeNode);
    
                    return true;
                }
                else
                {
                    return false;
                }
    
            }
    
        }
    }

      

    public TreeNode GetRuibetsu()
    {
    return OledbHelper.GetWPSFTreeModel(WPSF1Sql.RuibetsuSelect, WPSF1Sql.RuibetsuName).TreeNode;
    }

    public static WPSFTreeModel GetWPSFTreeModel(string mdx, string titleName = null)
    {  //WPSFTreeModel 为自定义的一个Model

    WPSFTreeModel rtn = null;

    取得数据
    OleDbDataReader reader = GetReader(mdx);

    //名称(缩写,可能重名)
    string name;
    //全名(唯一性,不能重名)
    string unique;
    //父节点全名(唯一性)
    string parentUnique;

    Dictionary<string, WPSFTreeModel> modelDic = new Dictionary<string, WPSFTreeModel>();

    //遍历数据源

    while (reader.Read())

    {

    name = reader.GetValue["列名"].ToString();
    unique = reader.GetValue["列名"].ToString();
    parentUnique = reader.GetValue["列名"].ToString();

    WPSFTreeModel item = new WPSFTreeModel(name, unique, parentUnique);

    if (modelDic.ContainsKey(unique))
    {
    modelDic[unique] = item;
    }
    else
    {
    modelDic.Add(unique, item);
    }


    if (modelDic.ContainsKey(parentUnique))
    {
    modelDic[parentUnique].Add(item);
    }
    else
    {
    modelDic.Add(parentUnique, null);//error?
    }


    if (string.IsNullOrEmpty(parentUnique))
    {
    rtn = item;
    }
    }


    if (!string.IsNullOrEmpty(titleName))
    {
    rtn.TreeNode.Text = titleName;
    }
    rtn.TreeNode.CollapseAll();

    return rtn;
    }

    //自定义Model

    public class WPSFTreeModel
    {
    //构造函数
    public WPSFTreeModel(string name,string unique,string parentUnique)

    this.name = name;
    this.unique = unique;
    this.parentUnique = parentUnique;

    this.node = new TreeNode(); ;
    this.node.SelectAction = TreeNodeSelectAction.None;
    this.node.Text = this.name;
    this.node.Value = this.name;
    }


    private string name;

    public string Name
    {
      get
        {
          return this.name;
        }
    }


    private string unique;


    public string Unique
    {
       get
        {
          return this.unique;
        }
    }

    private string parentUnique;

    public string ParentUnique
    {
       get
        {
          return this.parentUnique;
        }
    }

    private TreeNode node;

    public TreeNode TreeNode
    {
      get
        {
          return this.node;
        }
    }

    //这个属性可以不要
    private List<WPSFTreeModel> list;

    public List<WPSFTreeModel> List
    {
      get
        {
          return this.list;
        }
    }

    //这个方法可以不要
    public void ClearList()
    {
      this.list = null;
    }

    //添加子节点

    public bool Add(WPSFTreeModel item)
    {
      if(this.list==null)
        {
          this.list = new List<WPSFTreeModel>();
        }

    //上面的可以不要
      if(this.unique.Equals( item.parentUnique))
        {
          this.list.Add(item);
          this.node.ChildNodes.Add(item.TreeNode);

          return true;
        }
      else
        {
          return false;
      }

    }

    //这个方法可以不要

    private void AddRange(List<WPSFTreeModel> list)
    {
       if (this.list == null)
        {
          this.list = new List<WPSFTreeModel>();
        }
      this.list.AddRange(list);
    }
    }

  • 相关阅读:
    jquery扩展鼠标mousewheel事件
    addEventListener和attachEvent介绍, 原生js和jquery的兼容性写法
    HTML,CSS,font-family:中文字体的英文名称
    最好的Java和Android开发IDE---IntelliJ IDEA使用技巧
    《Thinking in Java》习题——吸血鬼数字
    Java学习之——JavaBeans
    Android 开源库——侧滑菜单栏(SlidingMenu)的导入和使用
    Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)
    Android 布局学习之——Layout(布局)详解一
    Android 布局学习之——LinearLayout的layout_weight属性
  • 原文地址:https://www.cnblogs.com/loveLu/p/4904784.html
Copyright © 2020-2023  润新知