有一个表,表名:一年级,有两字段:班级与学生姓名
班级     学生姓名
一班     同学A
一班     同学B
一班     同学C
.......
二班     同学名1
二班     同学名2
.......
现在想生成类似下面的树:一年级

|____一班
|     |___同学A
|     |___同学B 
|     |___同学C

|_____二班
      |___同学1
      |___同学2实际的表中有若干班级,每班有数十学生.
在ASP.NET中用C#怎么生成这个树?求完整具体代码。

解决方案 »

  1.   

    按照你的要求给你写好了protected Microsoft.Web.UI.WebControls.TreeView tvGrade;private void Page_Load(object sender, System.EventArgs e)
    {
    TreeNode tnGrade = new TreeNode();
    tnGrade.Text = "一年级";
    tnGrade.Expanded = true;
    GenerateGrade(tnGrade.Nodes);
    this.tvGrade.Nodes.Add(tnGrade);
    }private void GenerateGrade(TreeNodeCollection tnc)
    {
    SqlConnection conn = null;
    SqlDataReader dr = null; try
    {
    conn = new SqlConnection("Server=(local);Database=Northwind;uid=sa;password=sa");
    SqlCommand cmd = new SqlCommand("SELECT DISTINCT 班级 FROM 一年级", conn);
    conn.Open();
    dr = cmd.ExecuteReader();
    while (dr.Read())
    {
    TreeNode tnClass = new TreeNode();
    tnClass.Text = dr.GetString(0);
    tnClass.Expanded = true;
    tnc.Add(tnClass);
    }
    dr.Close(); foreach (TreeNode tnClass in tnc)
    {
    cmd.CommandText = "SELECT 学生姓名 FROM 一年级 WHERE 班级='" + tnClass.Text + "'";
    dr = cmd.ExecuteReader();
    while (dr.Read())
    {
    TreeNode tnStudent = new TreeNode();
    tnStudent.Text = dr.GetString(0);
    tnClass.Nodes.Add(tnStudent);
    }
    dr.Close();
    }
    }
    finally
    {
    if (dr != null)
    {
    dr.Close();
    }
    if (conn != null)
    {
    conn.Close();
    }
    }
    }
      

  2.   

    fancyf(凡瑞) 动作够快咯,HOHO……
    我就不贴了,顶一下
      

  3.   

    用我的吧, 不存在循环  只遍历一次数据库 private void Ref()
    {//  SELECT ID, Name, Address, City, Fax FROM Customer ORDER BY City, Name, ID
    this.tv1.Nodes.Clear();
    string ntext = "";
    int i = 0; this.cmdSql.Connection.Open();
    System.Data.SqlClient.SqlDataReader rd = this.cmdSql.ExecuteReader();
    while( rd.Read() )
    {
    if( rd["City"].ToString() != ntext )
    {
    ntext = rd["City"].ToString();
    TreeNode fnode = new TreeNode(ntext);
    this.tv1.Nodes.Add(fnode);
    i++;
    }
    //上面的条件判断在第一个部门和每次遇到新部门的时候执行
    if( rd["City"].ToString() == ntext )
    {
    TreeNode snode = new TreeNode(rd["Name"].ToString());
    snode.Tag = rd["ID"].ToString();
    this.tv1.Nodes[i-1].Nodes.Add(snode);
    }
    }
    rd.Close();
    this.cmdSql.Connection.Close();

    this.NoDo();
    }
      

  4.   

    真够快的
    还是用我的吧
    表建的时候用递归,可以设计无限级
    sNo, sName, parentNo
    然后用下面的
    调用
    public void LoadTree(Microsoft.Web.UI.WebControls.TreeView tvwStudents,string strPersonNo)
    {
    IInitStudentsTree(tvwStudents.Nodes,"0");

    }//功能树//建树的基本思路是:从根节点开始递归调用显示子树 
    private void InitStudentsTree(TreeNodeCollection Nds,string strParentNo)
    {

    DataView dv=new DataView();
    TreeNode tmpNd;
    dv.Table=man.GetDs("tree","Select * From students").Tables["tree"];
    dv.RowFilter="ParentNo='" + strParentNo + "'" ;
    foreach(DataRowView drv in dv)
    {
    tmpNd=new TreeNode();
    tmpNd.ID=drv["sNo"].ToString();
    tmpNd.Text=drv["sName"].ToString();
    tmpNd.ImageUrl = "../../images/icon/Function.bmp";
    Nds.Add(tmpNd);
    tmpNd.Expanded=true;
    tmpNd.CheckBox =true;
    InitStudentsTree(tmpNd.Nodes,tmpNd.ID);
    }
    }