我想从一个数据表读出数据用 treeview 来显示。其中有三个数据表,字段如下
++++++++++++++++++++++++++++++++++++++++
  数据库名“新闻大类”,字段如下:
  
  ID   大类名
-------------------------------------
  数据库名“新闻二类”,字段如下。  ID   大类名  二类名
--------------------------------------
  数据库名“新闻三类”,字段如下。  ID   大类名  二类名  三类名
-------------------------------------结构如下:
    根节点---------->邦定"新闻大类数据表"的“大类名”字段并把“大类名”传值给二级节点。
       二级节点----->邦定“新闻二类”的“二类名”字段 且 “大类名”字段=传过来的值
       二级节点
       ........
            三级节点
            三级节点
            ........
     根节点
       二级节点
       二级节点
       ........
            三级节点
            三级节点
            ........

解决方案 »

  1.   

    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using Microsoft.Web.UI.WebControls;
    using System.Data.SqlClient;namespace LunTan
    {
    /// <summary>
    /// treeView 的摘要说明。
    /// </summary>
    public class treeView : System.Web.UI.Page
    {
    protected Microsoft.Web.UI.WebControls.TreeView TreeView1;
    private string source="server=BILLGATES;uid=sa;pwd=;database=LunTan";
    private string select="";
    private void Page_Load(object sender, System.EventArgs e)
    {
    select="SELECT * From tree_Ta";
    SqlConnection conn=new SqlConnection(source);
    SqlDataAdapter cmd=new SqlDataAdapter(select,source);
    DataSet ds=new DataSet();
    cmd.Fill(ds,"tree_Ta");
    this.ViewState["ds"] = ds; 
    addNode(0,null);

    }

    //注意,必须用viewstate保存状态? private void addNode(int parentId,TreeNode parentNode)
    {
    DataSet ds = (DataSet)this.ViewState["ds"];
    DataView dv = new DataView(ds.Tables["tree_Ta"]);
    dv.RowFilter = "[parentid] = " + parentId;
    foreach(DataRowView Row in dv)
    {
    if(parentId==0)
    {
    TreeNode node=new TreeNode();
    node.ID=Row["nodeid"].ToString();
    node.Text=Row["nodetext"].ToString();
    string text=Row["nodetext"].ToString();
    string idd=Row["nodeid"].ToString();
    TreeView1.Nodes.Add(node);
    node.Expanded=true;
    addNode(int.Parse(node.ID),node);

    }
    else
    {
    TreeNode node=new TreeNode();
    node.ID=Row["nodeid"].ToString();
    node.Text=Row["nodetext"].ToString();
    string text=Row["nodetext"].ToString();
    string idd=Row["nodeid"].ToString();

    parentNode.Nodes.Add(node);
    node.Expanded=true;
    addNode(int.Parse(node.ID),node);
    }
    }
    }

    // private void addChildNode(TreeNode parentNode)
    // {
    // select="SELECT bbsid,bbsdetails FROM bbs_Ta WHERE titleId="+int.Parse(parentId);
    // SqlConnection conn=new SqlConnection(source);
    // conn.Open();
    // SqlCommand cmd2=new SqlCommand(select,conn);
    // SqlDataReader dr=cmd2.ExecuteReader();
    //
    // while(dr.Read())
    // {
    // TreeNode node=new TreeNode();
    // node.ID=dr.GetInt32(0).ToString();
    // node.Text=dr.GetString(1);
    // node.Expanded=true;
    // parentNode.Nodes.Add(node);
    //
    // }
    //
    // }
    #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.Load += new System.EventHandler(this.Page_Load);}
    #endregion
    }
    }
      

  2.   

    嵌套三层循环不就可以啦, 
    下面示例 大类表 table1 二类 table2 三类 table3
     
    for (int i=0;i<table1.Rows.Count;i++)
    {
    TreeNode myNoteTp=new TreeNode();
    string value = myDvTemp[i]["value"];
    myNoteTp.Text = value;
    myNoteTp.Target="WZL_ZLK";//右边框架名称
    myNoteTp.NavigateUrl = "target.aspx?id="+value;     //链接路径,传入参数
    ParNode.Nodes.Add(myNoteTp);

    }
     
      

  3.   

    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Data .OleDb;
    using Microsoft.Web.UI.WebControls;
    using System.Configuration ;
    using System.Text.RegularExpressions ;
    namespace ydmis_ls_web
    {
    /// <summary>
    /// left 的摘要说明。
    /// </summary>
    public class left : System.Web.UI.Page
    {
    protected Microsoft.Web.UI.WebControls.TreeView TreeView1;
    public System.Data.OleDb.OleDbConnection oleDbConnection1;


    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面

    string  strTreeName  =  "TreeView1";  
    string  strRef  =  Page.GetPostBackEventReference(TreeView1);  
    string  strScript  =  "<script  language=\"JavaScript\">  \n"  +  "<!--  \n"  +  "            function  initTree()  {  \n"  +"                        "  +  strTreeName  +  ".onSelectedIndexChange  =  function()  {  \n"  +    "if  (event.oldTreeNodeIndex  !=    event.newTreeNodeIndex)  \n"  +  "this.queueEvent('onselectedindexchange',  event.oldTreeNodeIndex  +  ','  +  event.newTreeNodeIndex);  \n"  +    "window.setTimeout('"  +  strRef.Replace("'","\\'")    +  "',  0,  'JavaScript');  \n"  +    "                        }  \n"  +      "            }  \n"  +    "//  -->  \n"  +  "</script>";  
    Page.RegisterClientScriptBlock("InitTree",strScript  );  if (!Page.IsPostBack)
    {
    this.oleDbConnection1=new OleDbConnection( ConfigurationSettings.AppSettings.GetValues(0)[0]); oleDbConnection1.Open ();
          
    TreeNode node=new TreeNode();

    TreeView1.Nodes.Add(ShowAllTree(0, oleDbConnection1,node)); //根节是以PID为0标志的 }
    } private TreeNode ShowAllTree(int ddd ,OleDbConnection  oleDbConnection1,Microsoft.Web.UI.WebControls.TreeNode node)
    {
    string sqlSelect =
              "SELECT id_,id_c,name_  FROM asp_tree  where id_='"+ddd+"'"  ;
     OleDbDataAdapter da = new  OleDbDataAdapter(sqlSelect, oleDbConnection1);
    DataTable dt=new DataTable();
    da.Fill(dt);
        
    for(int i=0;i<dt.Rows.Count;i++)           
    {
    TreeNode newNode=new TreeNode();
         DataRow dr=dt.Rows[i];
        
                    
    newNode.Text="<font color=#ffffff >"+ dr["name_"].ToString()+"</font>"; // newNode.Text=dr["name_"].ToString ();

    newNode.ImageUrl="Images/283.gif";
             
                
    node.Nodes.Add(newNode); int newID = Convert.ToInt32 (dt.Rows[i][1]);; ShowAllTree(newID,this.oleDbConnection1 ,newNode); //递归调用,将子结点ID当做下一当前结点ID }

    dt.Dispose();
    return node;

    }
    #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.TreeView1.SelectedIndexChange += new Microsoft.Web.UI.WebControls.SelectEventHandler(this.TreeView1_SelectedIndexChange);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion
    private void TreeView1_SelectedIndexChange(object sender, Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs e)
    {
    //this.TreeView1.AutoPostBack=true;
    string temp=(this.TreeView1.GetNodeFromIndex(this.TreeView1.SelectedNodeIndex)).Text ; if (System.Text.RegularExpressions.Regex.Replace(temp,@"[NUL -~ ]","")=="国内大事")
    {
            
    Response.Write("<script>parent.frames.item('mainFrame').location='WebForm3.aspx'</script>");
    //this.TreeView1.AutoPostBack=false;
    }
     


    System.Text.RegularExpressions.Regex.Replace(temp,@"[NUL -~ ]","");// 用正则表达式反回汉字
    } }
    }
      

  4.   

    //不好意思重发一次~
    嵌套三层循环不就可以啦, 
    下面示例 大类表 table1 二类 table2 三类 table3
     
    //首先查询出大类表 table1
    for (int i=0;i<table1.Rows.Count;i++)
    {
        TreeNode level1 = new TreeNode();      
        string name1 = table1[i]["名称"];
        level1.Text = value;
        level1.NavigateUrl = "target.aspx?name="+name1;     //链接路径,传入参数

        //根据name1 查询出二类表中的子类 table2
        for (int i=0;i<table2.Rows.Count;i++)
        {
            TreeNode level2 = new TreeNode();      
            string name2 = table1[i]["名称"];
            level2.Text = value;
            level2.NavigateUrl = "target.aspx?name="+name1;  
            
            level1.Nodes.Add(level2);                  //添加第二层节点
            
             //根据name2  查询出三类表中的子类 table3
             for (int i=0;i<table3.Rows.Count;i++)
             {
                 TreeNode level3 = new TreeNode();      
                 string name3 = table1[i]["名称"];
                 level3.Text = value;
                 level3.NavigateUrl = "target.aspx?name="+name1;  
            
                 level2.Nodes.Add(level3);          //添加第三层节点
           }
            
        }
        
       TreeView1.Nodes.Add(level1);               //添加第一层节点

    }
      

  5.   

    哎,我晕,还有错误在里面,csdn 的编辑框NND真麻烦
    -----------------------------------------------
    level3.Text = name3;
    level3.NavigateUrl = "target.aspx?name="+name3;  
    -----------------------------------------------
    level1 和level2 中也错了~ faint