FlyTreeView for .net控件的使用

控件下载地址   http://d.download.csdn.net/down/1059698/chenguang79

 

这里只说明一下我在使用中的一些方法。只是做为个人记录。如有不当之处,请朋友给与指出,本人万分感谢

 

个人感觉FlyTreeView这个树控件是现在所有树控件中比较好的一种,在做一些项目中全都使用了此树。下面我将我的一些使用介绍一下。一是为自己做一个记录,二是希望能帮助一些初用的朋友。

 

这里我用一个简单的例子,就是学校教研组与老师的关系,我这里有二个表,一个表用来存入一个学校有哪些教研组,另一个表用来存放老师的信息。它们是通过Dept_ID字段进行关联的

 

在这里,我完成的功能是这样的,树结构是分层获得并且加上了复选框。我这里的分层是,你点击树上哪个根结点它就把它对应的子结点信息从数据库中取出,并展开,显示出来。这种方法,对于一颗比较大的树来说是很好用的。

下面是我的代码。

 

前台代码

 

 

后台代码

 

 

node.Expanded是用来在一加载时就把所有树全展开

 

 

上面的例子做一些简单的已经可以,可是如果我们要的树是一个多层,而是在一个表中怎么呢。现在很多菜单表设置全是一个表,只不过采用一个parentsID这样的字段来分出层了。下面的例子就是这样的一个

这个表与上面的表不一样。是一个菜单的显示。在程序中,我只是把一些用到的字段说明一下,

ID  parentID fun_id      fun_name

1433    -1         92            我的公文包
1434    1433    9201        公告管理
1435    1433    9202        公文流转
1436    1435    920201    文件类型
1437    1435    920202    文件头
1438    1435    920203    显示设置

1439    1435    920204    增加电子印章

 

我给出了这个简单的列表,我想大家也能明白,各个字段的意思了吧

 


using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Data;  
using System.Web;  
using System.Web.UI;  
using System.Web.UI.WebControls;  
namespace ClassOnLineSms.NewsManage 
{  
    public partial class NewTree : System.Web.UI.Page  
    {  
        //标识字段  
        public string user_flag = "O";
        public int i = 2;
        protected void Page_Load(object sender, EventArgs e)  
        {  
            if (!Page.IsPostBack)  
            {  
                //根节点第一层,这里要注意一点的,在这里显示的一定是第一层的信息
                string strsql = "select *,len(fun_ID) as fun_Len from menu_fun where len(fun_ID)=" + i + " and fun_Flag='" + user_flag + "' order by fun_ID";
                //Response.Write(strsql);

                //把所得到的值存入DataTable  
                DataTable dt = DataBaseClass.ExecuteDataSetReader(DataBaseClass.DataBaseConn, CommandType.Text, strsql).Tables[0];  
                foreach (DataRow row in dt.Rows)  
                {  
                    AddChild(null, row);  
                }  
            }  
        }  
        //这里是通过得到的数据进行给值的方法,
        private void AddChild(NineRays.WebControls.FlyTreeNode fnode, DataRow row)  
        {
            NineRays.WebControls.FlyTreeNode node = new NineRays.WebControls.FlyTreeNode(row["fun_ID"].ToString());  
            //看了我给的字段内容,大家也明白了。我这里每二位就是一层,所以我要在里显示下一层的话,就要加二位了


            int j = int.Parse(System.Convert.ToString(row["fun_Len"]))+2;
           
      
            string strsql = "select *,len(fun_ID) as fun_Len from menu_fun where  len(fun_ID)=" + j + " and fun_Flag='" + user_flag + "'  and  fun_ID like '" + row["fun_ID"] + "%' and fun_ID <> '" + row["fun_ID"] + "' order by fun_ID";
            //Response.Write(strsql);
            DataTable tabChild = DataBaseClass.ExecuteDataSetReader(DataBaseClass.DataBaseConn, CommandType.Text, strsql).Tables[0];  
           
            node.Text = row["fun_name"].ToString();
            node.Value = row["fun_ID"].ToString();
            if (fnode != null)
            {
                fnode.ChildNodes.Add(node);
            }
            else
            {
                this.FlyTreeView1.Nodes.Add(node);
            }
      //这里是我们要注意的,这里与上面的例子不同的地方在于,这个判断是否有子结点的判断放到了下面

            if (tabChild.Rows.Count > 0)
            {
                //检查每一个子结点,然后递归调用此方法。以达到多层的效果
                for (int i = 0; i < tabChild.Rows.Count; i++)
                {
                    //这个属性是用来显示结点前面是否有+号的
                    node.PopulateNodesOnDemand = true;

                    AddChild(node, tabChild.Rows[i]);
                }
            }
            else
            {
                node.PopulateNodesOnDemand = false;
            }
           
        }  
        //当用户点击结点时,触发的事件  
        protected void FlyTreeView1_PopulateNodes(object sender, NineRays.WebControls.FlyTreeNodeEventArgs e)  
        {  
            //Response.Write("aaaa"+e.Node.Value.ToString());  
              
            if (e.Node.ChildNodes.Count <= 0)  
            {

                string strsql = "select * from menu_fun where fun_Flag='" + user_flag + "' and fun_ID like '" + e.Node.Value.ToString() + "%' and fun_ID <> '" + e.Node.Value.ToString() + "'  order by fun_ID";
                //Response.Write(strsql);
                DataTable tabChild = DataBaseClass.ExecuteDataSetReader(DataBaseClass.DataBaseConn, CommandType.Text, strsql).Tables[0];  
                if (tabChild.Rows.Count > 0)  
                {  
                    foreach (DataRow r in tabChild.Rows)  
                    {  
                        NineRays.WebControls.FlyTreeNode node = new NineRays.WebControls.FlyTreeNode(e.Node.Text);
                        node.Text = r["fun_name"].ToString();
                        node.Value = r["fun_ID"].ToString();  
                        e.Node.ChildNodes.Add(node);  
                    }  
                }  
                 
            }  
            //这里的方法是如果点选了其中的一个父结点,它的子结点也应该被选中  
            if (e.Node.Checked)  
            {  
                foreach (NineRays.WebControls.FlyTreeNode fn in e.Node.ChildNodes)  
                {  
                    fn.Checked = true;  
                }  
            }  
        }  
        protected void Button1_Click(object sender, EventArgs e)  
        {  
            string strTemp = "";  
            foreach (NineRays.WebControls.FlyTreeNode node in this.FlyTreeView1.Nodes)  
            {  
                //if (node.Checked == true)  
                //{  
                //    strTemp += node.Value.ToString() + "---";  
                    foreach (NineRays.WebControls.FlyTreeNode Cnode in node.ChildNodes)  
                    {  
                        if (Cnode.Checked == true)  
                        {  
                            strTemp += Cnode.Value.ToString() + ",";  
                        }  
                    }  
                //}  
            }  
            Response.Write(strTemp.Substring(0,strTemp.Length-1));  
        }  
    }  
}

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值