using System;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using Microsoft.Web.UI.WebControls;
namespace Example
{
public class TreeViewExample6 : System.Web.UI.Page
{
protected SqlConnection myConn;
protected SqlDataAdapter myAdapter;
protected DataSet data;
protected Microsoft.Web.UI.WebControls.TreeView myTree;
protected string query;

private void Page_Load(object sender, System.EventArgs e)
{
// 从Web.config配置节中读取数据库连接字符串
string ConnStr = System.Configuration.ConfigurationSettings.AppSettings["ConnectionSqlServer"];
myConn = new SqlConnection(ConnStr);
CreateDataSet();
InitTree(myTree.Nodes, "0");
} // 将数据库的内容存入DataSet做缓冲
private DataSet CreateDataSet()
{
query = "SELECT * FROM TreeViewTable";
myAdapter = new SqlDataAdapter(query, myConn);
data = new DataSet();
myAdapter.Fill(data, "tree"); return data;
} // 从DataSet中取数据建树
// 从根节点开始递归调用显示子树
private void InitTree(TreeNodeCollection Nds,string parentId)
{
TreeNode tmpNd;
DataRow [] rows = data.Tables[0].Select("ParentId='" + parentId + "'"); foreach(DataRow row in rows)
{
tmpNd = new TreeNode();
tmpNd.ID = row["NodeId"].ToString();
tmpNd.Text = row["NodeName"].ToString();
tmpNd.NavigateUrl = row["Url"].ToString();
Nds.Add(tmpNd);
InitTree(tmpNd.Nodes, tmpNd.ID);
}
} #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
}
}

解决方案 »

  1.   

    如果是Windows窗体,应该怎样设计?
      

  2.   

    一个递归就可以了,MSDN上有原代码,COPY一个就可以的
      

  3.   

    晕,楼上的,treenode tmpnd是不错的,但是它有没有ID的属性啊?你运行的时候可以运行?不会吧!
    有错误的!
      

  4.   

    这个我写的,决定能运行,我当时是放在PageLoad下的
    if(!Page.IsPostBack)
    {
    SqlConnection conn=DB.createConnection();
    SqlDataAdapter sda=new SqlDataAdapter();
    sda.SelectCommand=new SqlCommand("select * from tb_lknowledgep",conn); //tb_lknowledgep为表名
    DataSet ds=new DataSet();
    sda.Fill(ds,"lknowledgep");//lknowledgep也为表名,自己写的,随便写都可以
    TreeView1.ShowPlus=true;
    foreach(DataRow dr in ds.Tables["lknowledgep"].Rows)
    {
    TreeNode tn=new TreeNode();
    tn.CheckBox=true;
    tn.Text=dr["lkName"].ToString();
    tn.NodeData=dr["lkId"].ToString();
    TreeView1.Nodes.Add(tn);
    sda.SelectCommand=new SqlCommand("select * from tb_sknowledgep where lkId="+dr["lkId"].ToString(),conn);
    DataSet ds1=new DataSet();
    sda.Fill(ds1,"sknowledgep");
    foreach(DataRow dr1 in ds1.Tables["sknowledgep"].Rows)
    {
    TreeNode childtn=new TreeNode();
    childtn.CheckBox=true;
    childtn.Text=dr1["skName"].ToString();
    childtn.NodeData=dr1["skId"].ToString();
    tn.Nodes.Add(childtn);
    }
    } }
      

  5.   

    刚才的排版有些问题,重新写一下
    if(!Page.IsPostBack)
    { SqlConnection conn=DB.createConnection();
    SqlDataAdapter sda=new SqlDataAdapter();
    sda.SelectCommand=new SqlCommand("select * from tb_lknowledgep",conn);
    DataSet ds=new DataSet();
    sda.Fill(ds,"lknowledgep");
    TreeView1.ShowPlus=true;
    foreach(DataRow dr in ds.Tables["lknowledgep"].Rows)
    {
    TreeNode tn=new TreeNode();
    tn.CheckBox=true;
    tn.Text=dr["lkName"].ToString();
    tn.NodeData=dr["lkId"].ToString();
    TreeView1.Nodes.Add(tn);
    sda.SelectCommand=new SqlCommand("select * from tb_sknowledgep  where lkId="+dr["lkId"].ToString(),conn);
    DataSet ds1=new DataSet();
    sda.Fill(ds1,"sknowledgep");
    foreach(DataRow dr1 in ds1.Tables["sknowledgep"].Rows)
    {
    TreeNode childtn=new TreeNode();
    childtn.CheckBox=true;
    childtn.Text=dr1["skName"].ToString();
    childtn.NodeData=dr1["skId"].ToString();
    tn.Nodes.Add(childtn);
    }
            }
    }
      

  6.   

    上贴的DB.createConnection();是我自己写的一个类的方法是用来创建数据库连接.
    等同于New SqlConnection("server=.;database=database;uid=sa;pwd=;")
      

  7.   

    private void CreateTree(TreeNodeCollection Nds, int  parentID)
            {
                DataView dv = new DataView();
                TreeNode tmpNd;
                int intID;
                dv.Table = ds.Tables["tree"];
                dv.RowFilter = "parentid='"+ parentID  +"'";
                foreach(DataRowView drv in dv)
                {
                    intID=Convert.ToInt16(drv["nodeid"]);
                    tmpNd = new TreeNode();
                    tmpNd.Name=drv["nodeid"].ToString();
                    tmpNd.Text = drv["nodename"].ToString();
                    Nds.Add(tmpNd);
                    CreateTree(Nds[Nds.Count - 1].Nodes, intID);
                }        }
            private void button1_Click(object sender, EventArgs e)
            {
                FillDate();
                CreateTree(trvMain.Nodes, 0);
            }        private void FillDate()
            {
                SqlCommand myCmd = new SqlCommand("select * from node", cnn);
                SqlDataAdapter myDataAdapter = new SqlDataAdapter();
                myDataAdapter.SelectCommand = myCmd;
                myDataAdapter.Fill(ds, "tree");
            }