要做一个部门管理的界面
客户要求是表格形式的,内容如下。
部门编码,部门名称,负责人,联系方式,人数。但我的困惑是,我的部门是分级次的,每人数要从末级的部门中统计。统计我可以解决。但是这种分级次的部门怎么在表格中显示呢。最好是这样。
部门A,部门名称,负责人,联系方式,人数。
     部门A1,部门名称,负责人,联系方式,人数。 
     部门A2,部门名称,负责人,联系方式,人数。
           部门A21,部门名称,负责人,联系方式,人数。
部门B,部门名称,负责人,联系方式,人数。
部门C,部门名称,负责人,联系方式,人数。类似一个树控件,但是要有很多列才可以。怎样能美观的实现呢??       

解决方案 »

  1.   

    左边用目录目录树,右边用datagridview,,,选择目录树的部门时,右边datagridview显示所以子部门的列表,目录树用递归的方法
      

  2.   

    说话费劲, 我还是上两张图吧:
    左边是TreeView控件, 右边是DataGridView控件。
      

  3.   

    可以用c1的grid。
    和你要求的一模一样的。另外可以自己做点东西。比如说在“部门A1”加点空格或者“-”啥的也可以。都很不错的
      

  4.   

    在不自己做一个控件的情况下就只有用5楼的方法了,在WPF里面我倒是看到过树跟表格结合的控件例子,直接100多行XAML代码就搞定了。只是你要用winform就难办了。
      

  5.   

    或者你可以在 5 楼的基础上使用树控件的展开收起事件实现表格里面的显示状况,因为 5 楼的只能显示一个节点及其子节点,并且使用的SelectionChanged事件。不过注意节点与行之间的对其情况
      

  6.   

    Developer Express .NET v8.2 的树控件好象是为你设计的。
      

  7.   


    Create TABLE CateTable (
          [CateID] [int] IDENTITY (1, 1) NOT NULL ,
           [Product] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
           [RootID] [int] NOT NULL ,
           [ParentID] [int] NOT NULL 
    )
    GO程序//从数据库中读取数据
                SqlConnection con = new SqlConnection("server=127.0.0.1\\sqlexpress;uid=sa;");
                con.Open();
                con.ChangeDatabase("STggggg");
                SqlCommand cmd = new SqlCommand("select * from 产品树 where NodeType='f'", con);
                //cmd.CommandType = CommandType.StoredProcedure;
                SqlDataAdapter sda = new SqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                try
                {
                    sda.Fill(ds);
                }
                catch
                {
                }
                finally
                {
                    cmd = null;
                    con.Close();
                }
                //往TreeView中添加树节点
                //添加根节点
                TreeNode tn = new TreeNode();
                tn.Text = "所有产品";
                tn.Name = "0";//Name作为ID
                tn.Tag = "0";//Tag作为RootID
                tn.ImageIndex = 0;
                tn.SelectedImageIndex = 0;
                tv.Nodes.Add(tn);//该TreeView命名为tv
                tv.SelectedNode = tv.TopNode;
                //把其他节点加上去
                if (ds != null)
                {
                    foreach (DataRow dr in ds.Tables[0].Rows)
                    {
                        tn = new TreeNode();
                        tn.Text = dr["Product"].ToString();
                        tn.Name = dr["CateID"].ToString();//Name作为CateID
                        tn.Tag = dr["RootID"].ToString();//Tag作为RootID
                        tn.ImageIndex = 1;
                        tn.SelectedImageIndex = 1;
                        //判断是否为主节点
                        if (dr["CateID"].ToString() == dr["RootID"].ToString())
                        {
                            //主节点
                            tv.SelectedNode = tv.TopNode;
                        }
                        else
                        {
                            //其他节点
                            if (tv.SelectedNode.Name != dr["ParentID"].ToString())
                            {
                                TreeNode[] tn_temp = tv.Nodes.Find(dr["ParentID"].ToString(), true); //通过ParentID查找父节点
                                if (tn_temp.Length > 0)
                                {
                                    tv.SelectedNode = tn_temp[0]; //选中查找到的节点
                                }
                            }
                        }
                        tv.SelectedNode.Nodes.Add(tn);
                    }
                    //tv.ExpandAll();//展开TreeView
                    tv.SelectedNode = tv.TopNode; //最顶端节点选中
                }