当前位置:编程学习 > C#/ASP.NET >>

我想实现如下样式的DataGridView??

在c# winform 模式下,我想实现如下样式的DataGridView,在"结点类型"的列中插入类似treeView 样式的列值? 

如下图: 

--------------------编程问答-------------------- 不要下沉 --------------------编程问答-------------------- 在线等...... --------------------编程问答-------------------- 学习 --------------------编程问答-------------------- 帮顶~~ --------------------编程问答-------------------- 帮顶 --------------------编程问答-------------------- 用代码在容器控件里放个树控件也能达到这种效果,不过比较复杂 --------------------编程问答-------------------- 直接用TreeView做不行吗?无非是横行上多些内容. --------------------编程问答--------------------
引用 6 楼 chenhaoying 的回复:
用代码在容器控件里放个树控件也能达到这种效果,不过比较复杂

能举个例子吗? --------------------编程问答-------------------- 不一定要在DataGridView下实现这种效果,比如有和这个类似的控件也行

请各位大侠指点,在线等...谢谢!
--------------------编程问答-------------------- treeview控件不就可以吗 --------------------编程问答--------------------
引用 10 楼 zhangyu_xl 的回复:
treeview控件不就可以吗

thanks to zhangyu_xl:

请问怎么实现,“wbs代码”和“wbs名称”两列的值怎么办,treeview 只是在单列中? --------------------编程问答-------------------- treeview可以实现左边的树形节点 --------------------编程问答-------------------- 用TreeView 加一个ListView Detail模式,两个的onselectitemchanged 处理一下就行了。 --------------------编程问答-------------------- TreeView  --------------------编程问答--------------------
引用 6 楼 chenhaoying 的回复:
用代码在容器控件里放个树控件也能达到这种效果,不过比较复杂

写个自定义控件,由datagridview与treeview组成,似乎与你的效果会不一样,不过也是好主意
引用 7 楼 chenhaoying 的回复:
直接用TreeView做不行吗?无非是横行上多些内容.

外表会不一样,写还是简单. --------------------编程问答--------------------
引用 13 楼 nooning 的回复:
用TreeView 加一个ListView Detail模式,两个的onselectitemchanged 处理一下就行了。

thanks to nooning:
你的思路很好,能举个例子吗? --------------------编程问答-------------------- 顶 --------------------编程问答-------------------- 关注,学习! --------------------编程问答-------------------- 关注+学习 --------------------编程问答-------------------- 何苦呢,直接用三方控件,DotNetBar -DataGrid 设置几个属性就是你想要的结果了 --------------------编程问答-------------------- 左边一个TreeView右边一个DGV拼凑起来, 应该可行,不过难度在于一要调整行高使之看起来象在同一行,二要实现同步展开和折叠(控制右边DGV的行Visible属性应该可以办到) --------------------编程问答--------------------
引用 21 楼 bwangel 的回复:
左边一个TreeView右边一个DGV拼凑起来, 应该可行,不过难度在于一要调整行高使之看起来象在同一行,二要实现同步展开和折叠(控制右边DGV的行Visible属性应该可以办到)

这样的出错率比较高吧,有没有第三方的控件 --------------------编程问答--------------------
private void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e)
        {
            Brush forcolor;
            if ((e.State & TreeNodeStates.Selected)>0)
            {
                e.Graphics.FillRectangle(new SolidBrush(SystemColors.Highlight), e.Bounds);
                forcolor = new SolidBrush(Color.White);
            }
            else
            {
                e.Graphics.FillRectangle(new SolidBrush(Color.White), e.Bounds);
                forcolor = new SolidBrush(Color.Black);
            }
               
            e.DrawDefault = true;

            e.Graphics.DrawString("WBS代码", this.Font, forcolor, new PointF(e.Bounds.X + 100, e.Bounds.Y));
            e.Graphics.DrawString("WBS名称", this.Font, forcolor, new PointF(e.Bounds.X + 300, e.Bounds.Y));
          
        }


另设置:this.treeView1.DrawMode = System.Windows.Forms.TreeViewDrawMode.OwnerDrawAll; --------------------编程问答-------------------- 不要在一棵树上吊死,别的方法可以实现了也行啊! --------------------编程问答--------------------
引用 24 楼 lijin84100 的回复:
不要在一棵树上吊死,别的方法可以实现了也行啊!

先生有理了,但我这个项目具有特殊性,客户要求这样! --------------------编程问答--------------------
引用 23 楼 h_w_king 的回复:
C# codeprivate void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e)
        {
            Brush forcolor;
            if ((e.State & TreeNodeStates.Selected)>0)
            {
                e.Graphics.FillRectangle(new SolidBrush(SystemColors.Highlight), e.Bounds);
                forcolor = new SolidBrush(Color.White);
            }
            else
            {
         …


thanks to h_w_king:
方法不错,但是达不到需求 --------------------编程问答--------------------
引用 26 楼 Gerrards 的回复:
引用 23 楼 h_w_king 的回复:
C# codeprivate void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e) 
        { 
            Brush forcolor; 
            if ((e.State & TreeNodeStates.Selected)>0) 
            { 
                e.Graphics.FillRectangle(new SolidBrush(SystemColors.Highlight), e.Bounds); 
                forcolor = new SolidBrush(Color.White); 
            } 
     …



只是个参考,要一模一样须慢慢画. --------------------编程问答--------------------
引用 27 楼 h_w_king 的回复:
引用 26 楼 Gerrards 的回复:
引用 23 楼 h_w_king 的回复: 
C# codeprivate void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e) 
        { 
            Brush forcolor; 
            if ((e.State & TreeNodeStates.Selected)>0) 
            { 
                e.Graphics.FillRectangle(new SolidBrush(SystemColors.Highlight), e.Bounds); 
                forcolor = new SolidBrush(Color.W…

高手,能写详情一点吗? --------------------编程问答-------------------- 用Developer Express .NET 里面的控件应该很容易能达到这种效果吧 --------------------编程问答-------------------- 用dev express的Treelist控件,很容易实现  --------------------编程问答-------------------- 用第三方控件吧.
CompenentOne里的flexGrid可以实现. --------------------编程问答-------------------- 貌似第三方控件如DotNetBar等中的Tree可以实现这样的显示效果! --------------------编程问答-------------------- 后台绑定可以实现,不过比较复杂
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,