protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                TreeView TreeView1 = new TreeView();
                showtreeintreeview(0, TreeView1.Nodes);//这里出错:错误 2 参数“2”: 无法从“System.Web.UI.WebControls.TreeNodeCollection”转换为“System.Web.UI.WebControls.TreeNode”
            }        private void showtreeintreeview(int id, TreeNode node)
        {
            OracleConnection myConnection = new OracleConnection(Page_SQL_CONN_Entity);
            myConnection.Open();
            string MySelectSQL = "select * from sys_action_column where action_column_name=:Temp_query";
            //OracleCommand MyCmd = new OracleCommand(MySelectSQL, myConnection);
            //MyCmd.Parameters.Add(":Temp_query", OracleType.VarChar, 20).Value = query;
            OracleDataAdapter adapter = new OracleDataAdapter(MySelectSQL, myConnection);            DataSet ds = new DataSet();            adapter.Fill(ds);
            DataView dv = ds.Tables[0].DefaultView;
            dv.RowFilter = "action_column_id=" + id.ToString();   //父节点和子节点的连接,用过滤的方式   
            TreeNode item;
            foreach (DataRowView dr in dv)
            {
                if (node == null)
                {
                    item = new TreeNode();
                    item.Text = dr["action_column_name"].ToString();//节点的内容,   
                    //item.NavigateUrl=dr["url"].ToString();//节点的连接   
                    TreeView1.Nodes.Add(item);
                    showtreeintreeview(Convert.ToInt32(dr["action_column_id"]), item); //一个递归循环,   
                }
                else
                {
                    item = new TreeNode();
                    item.Text = dr["action_name"].ToString();
                    node.ChildNodes.Add(item);
                    showtreeintreeview(Convert.ToInt32(dr["id"]), item);
                    //item.NavigateUrl=dr["url"].ToString();   
                }
            }
        }我想问一下,TreeView绑定到oracle数据库到底是怎么做的,网上资源都好少啊。

解决方案 »

  1.   

    例如:
    TreeNode root = new TreeNode();
    root.Text  = "Root";
    root.Value = "root";
    TreeView1.Nodes.Add(root);showtreeintreeview(0, root);以上只是例子,实际需要可能需要更改部分代码
      

  2.   

    是不是foreach里面不对
    我试一下啦
      

  3.   

    (这是我在另一个帖里回复的 直接给你贴过来)
    TreeView控件的 这个是.net2005环境下的 2003也能用 menuInfo 和menuOp是我自定义的类 不用理它
    /// <summary>
        /// 初始化左栏列表树
        /// </summary>
        protected void InitMenuTree()
        {
            //选取模块列表
            MenuInfo mi = new MenuInfo();
            MenuOp mo = new MenuOp();
            mi.ParentId = -1;
            DataTable dt = mo.SelectMenu(mi);
            if (dt == null || dt.Rows.Count == 0) return;
            tvMenu.ShowExpandCollapse = true;
            tvMenu.ShowLines = false;
            tvMenu.CollapseImageUrl = virRoot + "/Images/012.png";
            tvMenu.ExpandImageUrl = virRoot + "/Images/013.png";
            tvMenu.NoExpandImageUrl = virRoot + "/Images/014.png";
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                TreeNode tn = new TreeNode();
                tn.Text = dt.Rows[i][MenuInfo.Fields.MenuName] == null ? "" : dt.Rows[i][MenuInfo.Fields.MenuName].ToString();
                tn.Value = dt.Rows[i][MenuInfo.Fields.MenuId].ToString();
                tn.NavigateUrl = virRoot + (dt.Rows[i][MenuInfo.Fields.FrmUrl] == null ? "" : dt.Rows[i][MenuInfo.Fields.FrmUrl].ToString());
                //tn.ImageUrl = virRoot + "/images/bb.gif";            
                tn.Target = "frmMain";
                tn.PopulateOnDemand = true;
                tn.Expand();
                tvMenu.Nodes.Add(tn);
                InitChildNodes(tn, 1);
            }
        }
        /// <summary>
        /// 递归添加节点
        /// </summary>
        /// <param name="t">节点实例</param>
        /// <param name="expandLevel">节点展开的级数</param>
        protected void InitChildNodes(TreeNode t,int expandLevel)
        {
            MenuInfo mi = new MenuInfo();
            MenuOp mo = new MenuOp();
            mi.ParentId = int.Parse(t.Value);
            DataTable dt = mo.SelectMenu(mi);
            if (dt == null || dt.Rows.Count == 0) return;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                TreeNode tn = new TreeNode();
                tn.Text = dt.Rows[i][MenuInfo.Fields.MenuName] == null ? "" : dt.Rows[i][MenuInfo.Fields.MenuName].ToString();
                tn.Value = dt.Rows[i][MenuInfo.Fields.MenuId].ToString();
                tn.NavigateUrl = virRoot + (dt.Rows[i][MenuInfo.Fields.FrmUrl] == null ? "" : dt.Rows[i][MenuInfo.Fields.FrmUrl].ToString());
                //tn.ImageUrl = virRoot + "/images/bb.gif";
                tn.Target = "frmMain";            
                tn.PopulateOnDemand = true;
                if (--expandLevel > 0){tn.Expand();}else{tn.Collapse();}
                t.PopulateOnDemand = false;
                t.SelectAction = TreeNodeSelectAction.SelectExpand;
                t.ChildNodes.Add(tn);
                InitChildNodes(tn, expandLevel);
            }
            return;
        }
      

  4.   

    dr["action_name"].ToString()
    这是一个集合,不是一个值.
      

  5.   

    上面的树 单击文本旁边的叉号和文本内容都能展开节点 
    哦 还有表结构很重要 构成数据的从属关系
    CREATE TABLE [dbo].[Menu] (
        [MenuID] [int] IDENTITY (1, 1) NOT NULL ,
        [parentId] [int] NULL ,
        [MenuName] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
        [FrmName] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
        [FrmUrl] [nvarchar] (500) COLLATE Chinese_PRC_CI_AS NULL ,
        [Ztsx] [char] (2) COLLATE Chinese_PRC_CI_AS NULL ,
        [MenuOrder] [int] NULL ,
        [Pic] [varchar] (500) COLLATE Chinese_PRC_CI_AS NULL ,
        [del] [bit] NULL ,
        [addTime] [datetime] NULL 
    ) ON [PRIMARY]
      

  6.   

    有适合这个要求的例子吗???
    很简单的二级树,一排父节点,各有一排子节点 简单结构显示如下: 
    000 
      001 
      002 
    111 
      101 
      102 
    222 
      201 
      202 数据库中两个表的结构基本和上面的一致 我改成简单的吧 
    表1 
    id   c_name   f_name_id(与表2相映射)     view_mode(使其可见或不可见) 表2 
    f_name_id   f_name 
    但数据库是oracle的,这方面有难度啊,网上见的少,所以请大虾帮忙了。