现在有teacher和student两个表(一个老师可以带多个老师和多个学生,每个老师和学生只能有一个老师),teacher表有个字段是parentteacherid,student有个字段是teacherid,我想问如何实现一种treeview树形:展开老师节点能显示出这个老师带的老师和学生。各位帮帮忙,最好能给出代码,急用,谢谢

解决方案 »

  1.   

    Select * From teacher Left join student
    on student.teacherid =teacher. parentteacherid
    然后低归这个表
      

  2.   

        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();            TreeView tv = new TreeView();
                tv.AfterSelect += new TreeViewEventHandler(tv_AfterSelect);
                tv.Dock = DockStyle.Fill;
                this.BuildTree(tv.Nodes, 0);
                this.Controls.Add(tv);
            }        private void tv_AfterSelect(object sender, TreeViewEventArgs e)
            {
                // 选择节点后,获取当前节点的信息
                // 你可以将下列信息赋给你对应的控件
                DataRow row = (DataRow)e.Node.Tag;            Int32 Id = (Int32)row["Id"];
                Int32 ParentId = (Int32)row["ParentId"];
                String Name = (String)row["Name"];
            }        private DataTable fSampleDataSource;
            public DataTable SampleDataSource
            {
                get
                {
                    if (fSampleDataSource == null)
                    {
                        // 这里构造一个 DataTable 如果是从数据库获取可以将这部分代码改为从数据获取的代码
                        fSampleDataSource = new DataTable();
                        fSampleDataSource.Columns.Add("Id", typeof(int)); // 节点 ID
                        fSampleDataSource.Columns.Add("ParentId", typeof(int)); // 父节点
                        fSampleDataSource.Columns.Add("Name", typeof(string)); // 节点名称                    fSampleDataSource.Rows.Add(new object[] { 1, 0, "根目录" });
                        fSampleDataSource.Rows.Add(new object[] { 2, 1, "一级目录A" });
                        fSampleDataSource.Rows.Add(new object[] { 3, 1, "一级目录B" });
                        fSampleDataSource.Rows.Add(new object[] { 4, 1, "一级目录C" });                    fSampleDataSource.Rows.Add(new object[] { 5, 2, "二级目录A" });
                        fSampleDataSource.Rows.Add(new object[] { 6, 2, "二级目录B" });
                    }                return fSampleDataSource;
                }
            }        /// <summary>
            /// 创建目录和文件树
            /// </summary>
            /// <param name="fNodes"></param>
            /// <param name="fPath"></param>
            public void BuildTree(TreeNodeCollection fNodes, Int32 fParentId)
            {
                foreach (DataRow row
                    in this.SampleDataSource.Select(String.Format("ParentId = {0}", fParentId)))
                {
                    TreeNode node = new TreeNode();
                    node.Text = row["Name"].ToString();
                    node.Tag = row;
                    // 递归创建子节点
                    this.BuildTree(node.Nodes, (Int32)row["Id"]);
                    fNodes.Add(node);
                }
            }
        }   
    }