我的程序是这样的:
protected void Page_Load(object sender, EventArgs e)
    {
        string teacherid = Session["userid"].ToString();
        if (!IsPostBack)
        {
            
            fill();
            DataView dv = drv("select distinct * from Course where TeacherID ='" + teacherid + "'");
            foreach (DataRowView datav in dv)
            {
                TreeNode tn = new TreeNode();
                tn.Text = datav["CourseName"].ToString();
                tn.Value = datav["StudentID"].ToString();
                tn.Expanded = true;
                TreeView1.Nodes.Add(tn);
                add(tn);
            }
        }
    }
    private void add(TreeNode tn)
    {
        string studentid = tnn.Value;
        DataView dv = drv("select * from Student where StudentID='" + studentid + "'");
        foreach (DataRowView datav in dv)
        {
            TreeNode tnn = new TreeNode();
            tnn.Text = datav["StudentRank"].ToString();
            tnn.Value = datav["StudentID"].ToString();
            tn.ChildNodes.Add(tnn);
        //    add2(tnn);
        }
    }
想实现第一级是显示课程名字,第2级显示年级,第3级显示班级,第4级显示学生名字,现在只添加了课程名字节点和年级节点,但我想再加两个节点,想再调用2个新函数来添加,但不知道怎么写这2个新函数?还有我想问在“protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)”里面我可不可以在得到的TreeView1.SelectedNode.Value值里面知道得到的值是年级啊?还是班级啊?还是学生名字啊?怎么判断?希望高手们可以把程序写得详细点,帮助理解,万分感谢

解决方案 »

  1.   

    有3个表,一个是教师表(有TeacherID,TeacherName),一个是学生表(StudentID,StudentName,StudentRank,StudentClass),一个是课程表(CourseID,CourseName,TeacherID,StudentID)
      

  2.   

    建议你不要再Load_Page里放太多的代码,分装一下;三个表合并一下 用有联系的键值合并起来,在遍历,最好用范型来给TreeView添加节点这样你要的值都可以在里面!!
      

  3.   

    //一个是教师表(有TeacherID,TeacherName)
        //一个是学生表(StudentID,StudentName,StudentRank,StudentClass)
        //一个是课程表(CourseID,CourseName,TeacherID,StudentID)
        
            
        protected void formTree()
        {
            string teacherid = Session["userid"].ToString();
            using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["CHATConnectionString"].ConnectionString))
            {
                using (SqlDataAdapter da = new SqlDataAdapter("SELECT CourseID,CourseName FROM course_table WHERE TeacherID='" + 
                                                                teacherid + "'", conn))
                {
                    DataTable dt = new DataTable();
                    da.Fill(dt);
                    foreach (DataRow dr in dt.Rows)
                    {
                        TreeNode tn = new TreeNode();
                        tn.Text = dr["CourseName"];
                        tn.Value = dr["CourseID"];
                        this.TreeView1.Nodes.Add(tn);
                        addRank(tn);
                    }
                }
            }
        }    protected void addRank(TreeNode parentNode)
        {
            using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["CHATConnectionString"].ConnectionString))
            {
                using (SqlDataAdapter da = new SqlDataAdapter("SELECT StudentRank FROM student_table " + 
                            "INNER JOIN course_table ON course_table.StudentID=student_table.StudentID " + 
                            "WHERE course_table.TeacherID='" + teacherid + "' AND course_table.CourseID='" + parentNode.Value + "'", conn)) 
                {
                    DataTable dt = new DataTable();
                    da.Fill(dt);
                    foreach (DataRow dr in dt.Rows)
                    {
                        TreeNode tn = new TreeNode();
                        tn.Text = dr["StudentRank"];
                        tn.Value = dr["StudentRank"];
                        parentNode.ChildNodes.Add(tn);
                        addClass(tn);
                    }
                }
            }
        }    protected void addClass(TreeNode parentNode)
        {
            using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["CHATConnectionString"].ConnectionString))
            {
                using (SqlDataAdapter da = new SqlDataAdapter("SELECT StudentClass FROM student_table " + 
                                "INNER JOIN course_table ON course_table.StudentID=student_table.StudentID " + 
                                "WHERE course_table.TeacherID='" + teacherid + "' " + 
                                "AND course_table.CourseID='" + parentNode.Parent.Value + "' " + 
                                "AND student_table.StudentRank='" + parentNode.Value + "'", conn)) 
                {
                    DataTable dt = new DataTable();
                    da.Fill(dt);
                    foreach (DataRow dr in dt.Rows)
                    {
                        TreeNode tn = new TreeNode();
                        tn.Text = dr["StudentClass"];
                        tn.Value = dr["StudentClass"];
                        parentNode.ChildNodes.Add(tn);
                        addStudent(tn);
                    }
                }
            }
        }    protected void addStudent(TreeNode parentNode)
        {
            using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["CHATConnectionString"].ConnectionString))
            {
                using (SqlDataAdapter da = new SqlDataAdapter("SELECT StudentID,StudentName FROM student_table " + 
                                "INNER JOIN course_table ON course_table.StudentID=student_table.StudentID " + 
                                "WHERE course_table.TeacherID='" + teacherid + "' " + 
                                "AND course_table.CourseID='" + parentNode.Parent.Parent.Value + "' " + 
                                "AND student_table.StudentRank='" + parentNode.Parent.Value + "' " + 
                                "AND student_table.StudentClass='" + parentNode.Value + "'", conn)) 
                {
                    DataTable dt = new DataTable();
                    da.Fill(dt);
                    foreach (DataRow dr in dt.Rows)
                    {
                        TreeNode tn = new TreeNode();
                        tn.Text = dr["StudentName"];
                        tn.Value = dr["StudentID"];
                        parentNode.ChildNodes.Add(tn);
                    }
                }
            }
        }
      

  4.   

    在这里也回一下~lz,我顺着你的思路(也没有改表的结构),用这四个嵌套的过程来形成这个TreeView,每加一级结点都要保证加入的内容是逐级深入得到的,即:比如说加入一个学生甲,要保证他是1班-〉1年级-〉A课程的学生,而加入1班,要保证1年级,A课程有1班同学参加,加入1年级要保证A课程有1年级同学参加,因此要逐级加入选择条件,这样才能保证关系正确,也保证每个父结点都有子结点,而不存在没有意义的结点~ 这个方法好像很笨,总觉得是反着推的,但是我暂时还没想到什么好的方法~ 
      

  5.   


    递归。可参考:http://topic.csdn.net/u/20080927/14/79c8be6e-8dc3-4467-aef9-71f6071ecc2a.html