当前位置: 代码迷 >> C# >> treeview 综合案例,该如何解决
  详细解决方案

treeview 综合案例,该如何解决

热度:33   发布时间:2016-05-05 04:05:55.0
treeview 综合案例
有个需求,打算做个treeview部门结构,窗体左边是树结构,右半部分是列表结构。
谁有案例,是否给提供一下呢,谢谢。
------解决思路----------------------
http://zhidao.baidu.com/link?url=avfsUilHIayWOngikhc-vPgI5czQ68djPBeRUSJKxExpcW8Rp9gRcHnv8PZ7b6K7d-oSpr6l592-Om87_HnE3a
------解决思路----------------------
或者你可以用DevExpress控件的TreeGrid
------解决思路----------------------
treeview控件实现系统导航
一、递归填充根节点控件导航
 protected void Page_Load(object sender, EventArgs e)
    {

        if (!IsPostBack)
        {
            //获取数据连接语句,并创建数据库连接对象
            myConn = DBClass.GetConnection();
            CreateDataSet();
            InitTree(TreeView1.Nodes, "0");
        }
    }
二、使用数据库数据填充父节点、子节点
 public DataSet CreateDataSet()
    {
        query = "select * from tbTree";
        myAdapter = new SqlDataAdapter(query, myConn);
        data = new DataSet();
        myAdapter.Fill(data, "tree");
        return data;

    }
    //从DataSet中取数据建树
    //从根节点开始递归调用显示子树
    public void InitTree(TreeNodeCollection Nds, string parentId)
    {
        TreeNode NewNode;
        //data为存储建树数据信息的数据集
        //用父节点进行筛选数据集中信息
        DataRow[] rows = data.Tables[0].Select("parent_Id='" + parentId + "'");
        foreach (DataRow row in rows)
        {

            NewNode = new
                TreeNode(row["title"].ToString(),                            //设置父节点
                row["Files_Id"].ToString(), "images/1.gif", row["NavigateUrl"].ToString(), "");
            Nds.Add(NewNode);
          
            InitTree(NewNode.ChildNodes, row["Files_Id"].ToString());//添加子节点
        }//codego.net/15/1/1/
    }
三、单击某节点触发跳转路径事件
 protected void TreeView1_SelectedNodeChanged1(object sender, EventArgs e)
    {
        int nodeId = Convert.ToInt32(TreeView1.SelectedValue);//获取TreeView控件选择的值
        string url = DBClass.GetUrl(nodeId);//获取指定地址
        Response.Redirect(url.ToString());//转到指定页
    }
//利用存储过程从数据库中获取TreeView中某个节点的关联地址
四、存储过程如下
public static GetUrl(int filesID)
{
  SqlConnection myConnection = GetConnection();
  SqlCommand myCommand = new SqlCommand("GetUrl",myConnection);
myCommand.CommandType=ConnandType.StoredProcedure;
//添加参数
SqlParameter FilsesId = new SqlParameter("@FilesId" , SqlDbType.Int,4);
FilsesId.Value = filesId;
myCommand.Parameters.Add(FilsesId);
//添加参数
SqlParameter Url = new SqlParameter("@Url", SqlDbType.NVarChar,100);
Url.Direction = ParameterDirection.Output;
myConnection.Open();
myCommand.ExecuteNonQuery();
string url Url.Value.ToString();
myCommand.Dispose();
myConnection.Dispose();
return url;
}

------解决思路----------------------
用树形列表动态显示菜单示例
public void GetCavernMenu(TreeNode newNodeA, ToolStripDropDownItem newmenuA, bool BL)
        {
            bool Var_Bool = true;
            if (newmenuA.HasDropDownItems && newmenuA.DropDownItems.Count > 0)
                for (int j = 0; j < newmenuA.DropDownItems.Count; j++)    //遍历二级菜单项
                {
                    //将二级菜单名称添加到TreeView组件的子节点newNode1中,并设置当前节点的子节点newNode2
                    TreeNode newNodeB = newNodeA.Nodes.Add(newmenuA.DropDownItems[j].Text);
                    Var_Bool = true;
                    if (BL == false)//判断当前命令项的上一级命令是否可用
                    {
                        newNodeB.ForeColor = Color.Silver;//设置当前命令项的字体颜色为不可用色
                        newNodeB.Tag = 0;//标识,不显示相应的窗体
                        Var_Bool = false;
                    }
                    else
                    {
                        if (newmenuA.DropDownItems[j].Enabled == false)//判断当前命令项是否为可用
                        {
                            newNodeB.ForeColor = Color.Silver;//设置当前命令项的字体颜色为不可用色
                            newNodeB.Tag = 0;//标识,不显示相应的窗体
                            Var_Bool = false;
                        }
                        else
                        {
                            newNodeA.ForeColor = Color.Black;//设置当前命令项的字体颜色为可用色
                            newNodeB.Tag = int.Parse(newmenuA.DropDownItems[j].Tag.ToString());//标识,显示相应的窗体
                        }
                    }
                    //将当前菜单项的所有相关信息存入到ToolStripDropDownItem对象中
                    ToolStripDropDownItem newmenuB = (ToolStripDropDownItem)newmenuA.DropDownItems[j];
                    if (newmenuB.HasDropDownItems && newmenuA.DropDownItems.Count > 0)//如果当前命令项有子项
                    {
                        newNodeB.Tag = 0;//标识,有子项的命令项
                        GetCavernMenu(newNodeB, newmenuB, Var_Bool);//调用递归方法
                    }
                }
        }
  相关解决方案