zoukankan      html  css  js  c++  java
  • 树型控件TreeView的几种用法

    1 基本用法

     void TreeViewDataBind()
            {
                //首先清除树型控件内的结点
                this.TreeView1.Nodes.Clear();
                //实例出一个结点
                TreeNode tn = new TreeNode();
                tn.Text = "根结点";
                tn.Value = "-1";
                //把这个结点添加到树型控件中
                this.TreeView1.Nodes.Add(tn);
                //添加所有结点的递归方法
                TreeViewBind(tn.ChildNodes, "0");
            }

          

            #region 树型控件递归绑定
            /// <summary>
            /// 添加所有结点的递归方法
            /// </summary>
            /// <param name="tnc">树型控件的结点</param>
            /// <param name="Id">ParentId</param>
            private void TreeViewBind(TreeNodeCollection tnc,string Id)
            {
                //先得到数据库中顶级所有结点
                DataTable dt = Business.SysMenu.GetList("ParentId="+ Id);
                //循环每一行数据
                foreach (DataRow dr in dt.Rows)
                {
                    //实例新结点
                    TreeNode tn = new TreeNode();
                    tn.Text = dr["title"].ToString();
                    tn.Value = dr["Id"].ToString();
                    //递归出该结点下的子结点
                    TreeViewBind(tn.ChildNodes, tn.Value);
                    //递归完成后添加到树型控件的结点中
                    tnc.Add(tn);
                }
            }
            #endregion

    从数据库中读出每个结点绑定到树型控件中

    2 递归加遍例

    实例:点击某结点,显示出该结点以及子结点下所有文章列表

    #region 点击结点所激发的事件
            protected void TV_Medical_SelectedNodeChanged(object sender, EventArgs e)
            {
                //定义承接某结点以及该结点下所有文章的ID号字符变量
                TextId = "";
                DataSet ds = new DataSet();
                //如果点选的是根结点,则显示出所有文章
                if (this.TV_Medical.SelectedNode.Depth == 0)
                {
                    ds = Business.MedicalKnowledgeClass.GetList("");
                    this.GV_MCText.DataSource = ds;
                    this.GV_MCText.DataBind();
                    this.Pn_Display.Visible = false;
                    this.Pn_GridView.Visible = true;
                    return;
                   
                }
                //如果选的不是根结点,则递归遍例出该结点以及子结点下所有文章列表
                TextId = GetNodesText(this.TV_Medical.SelectedNode, TextId, Convert.ToInt32(this.TV_Medical.SelectedNode.Value.ToString()));
                //如果有文章
                if (TextId != "")
                {
                    ds = Business.MedicalKnowledgeClass.GetList(" MC_Id in (" + TextId + ")");
                }
                else
                {
                    //ScriptManager.RegisterStartupScript(this.UpdatePanel1, this.GetType(), "CheckSearch", "alert('该结点下没有任何文章');", true);
                    //initPage();
                    //DataTable dt = new DataTable();
                    //dt.Rows.Add(
                    //return;
                }
                //列表绑定
                this.GV_MCText.DataSource = ds;
                this.GV_MCText.DataBind();
                this.Pn_Display.Visible = false;
                this.Pn_GridView.Visible = true;
              
              
            }
            #endregion

            #region 得到某一结点下的所有文章的ID号
            /// <summary>
            /// 利用递归遍历选中结点的所有文章和子结点文章
            /// </summary>
            /// <param name="tnc">选中的结点</param>
            /// <param name="a">用来存储文章ID的变量</param>
            /// <param name="ParentId">要得到文章父结点的编号</param>
            /// <returns>返回存储文章编号的字符串</returns>
           private string GetNodesText(TreeNode tnc,string a,int ParentId)
            {
               //先把当前选中结点下的文章ID存储到全局字符串变量中
                TextId =TextId+ Business.MedicalKnowledgeClass.GetParentText(ParentId);
               //遍历该结点的子结点
                for (int i = 0; i < tnc.ChildNodes.Count; i++)
                {
                    //得到每个字节点递归得出子结点下的文章的ID号
                    GetNodesText(tnc.ChildNodes[i], TextId,Convert.ToInt32(tnc.ChildNodes[i].Value) );
                }
                return TextId ;
            }
            #endregion

    树型控件的外观设置:

    ShowLines显示边线

    SelectedNodeStyle CssClass="leftNav_active" 选中后变色(加载CSS)

    在递归加载树型控件的时候,还有两个属性也要知道

    tn.SelectAction = TreeNodeSelectAction.Select;表示该节点在选中后的动作

    TreeNodeSelectAction.Select表示选中后引发树型控件的SelectedChanged事件

    TreeNodeSelectAction.Expand表示选中后引发树型控件的展开事件

     TreeNodeSelectAction.None什么也不做

    TreeNodeSelectAction.SelectExpand表示选中后引发树型控件的SelectedChanged事件+展开事件

    另一属性 tn.NavigateUrl = "MedicalKnowledgDisplay_Right.aspx?TextId=" + dr["Mc_ID"].ToString()

    该节点的url

    Target="right"是选中该节点后在哪个iframe里显示

    完整的递归实例:

     #region 树型控件递归方法绑定
            /// <summary>
            /// 树型控件递归出所有结点
            /// </summary>
            /// <param name="tnc">一个结点的实例(根结点)</param>
            /// <param name="ParentId">所属父系结点的ID号</param>
            void MyTreeViewBind(TreeNodeCollection tnc, int ParentId)
            {
                //先得到所有父系结点的结果集
                DataSet ds = Business.MedicalKnowledgeClass.GetList("MC_ParentId=" + ParentId + " and MC_Type=0");
                //循环每一行
                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    //实例出一个结点
                    TreeNode tn = new TreeNode();
                    //给结点的属性付值
                    tn.Text = dr["MC_Title"].ToString();
                    tn.Value = dr["MC_Id"].ToString();
                    //再递归出该结点的子结点
                    MyTreeViewBind(tn.ChildNodes, Convert.ToInt32(dr["MC_Id"].ToString()));
                    tn.SelectAction = TreeNodeSelectAction.SelectExpand;
                    tn.NavigateUrl = "MedicalKnowledgDisplay_Right.aspx?TextId=" + dr["Mc_ID"].ToString();
                    //递归出所有结点后,添加给根结点
                    tnc.Add(tn);
                }
            }
            #endregion

    转载自:http://www.cnblogs.com/yuanweisen/archive/2008/11/23/1339467.html
  • 相关阅读:
    IntelliJ IDEA AndroidStudio SVN无法使用
    三极管封装
    STC等单片机一开机就停电模式烧写程序办法
    CC2541设置中断输入模式
    C# WinForm 多线程 应用程序退出的方法 结束子线程
    CorelDrawX8安装时提示已安装另一个版本
    Win10下Prolific USB-to-Serial Comm Port驱动提示不能使用
    Keil5创建GPIO
    SQL行列转置
    Excel复制粘贴假死
  • 原文地址:https://www.cnblogs.com/KingStar/p/1631625.html
Copyright © 2011-2022 走看看