Winform系列——好看的DataGridView折叠控件

 来园子几年了,第一次写博客。以前看到别人的博客就在想:这些人怎么能有这么多时间整理这么多知识,难道他们不用工作、不用写代码、不用交付测试?随着工作阅历的增加,发现其实并不是时间的问题,关键一个字:懒。其实写博客的好处大家伙都心知肚明。呵呵,第一次写就这么多废话,看样子真是年纪大了。

  其实自己之前的5年也一直是做BS的系统,现在刚换的一家公司需要做一个CS的产品。屌了,自己之前一点经验都没有呢,没办法,既来之则安之,学呗。于是乎各种百度、各种视频,各种资料。系统其中一个需求就是需要表格折叠显示,这如果在BS里面那太简单了,JqGrid默认都自带,可是DataGridview不支持折叠啊,咋办。自己封装呗,于是乎又是各种百度,这种源码学习。最后借鉴源码封了这么一个东西,发出来分享下,也能让自己加深印象。首先不多说,上图:

Winform系列——好看的DataGridView折叠控件

 

Winform系列——好看的DataGridView折叠控件

 

Winform系列——好看的DataGridView折叠控件

Winform系列——好看的DataGridView折叠控件

大概的效果就是这样。上代码。

1、首先重写DataGridview,代码如下:

Winform系列——好看的DataGridView折叠控件 View Code

 

2、detailControl变量作为一个容器用来保存子表格,代码如下:

Winform系列——好看的DataGridView折叠控件 View Code

 

3、cModule.cs用来设置样式

Winform系列——好看的DataGridView折叠控件 View Code

  

4、From页面调用

1
2
3
4
5
6
7
8
9
10
11
#region 使用方法一
            //var oDataSet = GetDataSet();
            //
            //masterDetail = new MasterControl(oDataSet, controlType.outside);
            #endregion
 
            #region 使用方法二
            var dicRelateData1 = new Dictionary<stringstring>();
            var dicRelateData2 = new Dictionary<stringstring>();
            dicRelateData1.Add("Menu_ID","Menu_ID");//表格一和表格二之间的主外键关系
            dicRelateData2.Add("Menu_Name2","Menu_Name2");//表格二和表格三之间的主外键关系
1
masterDetail = new MasterControl(GetDataSource(), GetDataSource2(), GetDataSource3(), dicRelateData1, dicRelateData2, controlType.outside); #endregion panelView.Controls.Add(masterDetail);

    

 昨天应领导要求,折叠控件增加了折叠线的效果,看起来有没有更加像模像样了。~~~

其实就在行重绘事件private void MasterControl_RowPostPaint(object obj_sender, DataGridViewRowPostPaintEventArgs e)里面增加了如下代码:

using (Pen p = new Pen(Color.GhostWhite))
{
var iHalfWidth = (e.RowBounds.Left + sender.RowHeadersWidth) / 2;
var oPointHLineStart = new Point(rect1.X + iHalfWidth, rect1.Y);
var oPointHLineEnd = new Point(rect1.X + iHalfWidth, rect1.Y + rect1.Height / 2);
e.Graphics.DrawLine(p, oPointHLineStart, oPointHLineEnd);
//折叠线
e.Graphics.DrawLine(p, oPointHLineEnd, new Point(oPointHLineEnd.X + iHalfWidth, oPointHLineEnd.Y));
}

效果如下:

Winform系列——好看的DataGridView折叠控件

 

2015-07-01

PS:原以为CS的控件大家不会太感兴趣,这两天很多园友找我要源码,其实并非舍不得将源码共享,只是很多东西融入到项目中了很难分离出来,需要时间整理,望理解。知道这么多园友对CS的控件也感兴趣,我就抽时间整理了下折叠控件的Demo。本着大家共同进步的原则将源码共享出来。好的东西就要共享,咱.Net也要慢慢走共享开源路线哈~~

源码下载

 






本文转自懒得安分博客园博客,原文链接:http://www.cnblogs.com/landeanfen/p/4600051.html,如需转载请自行联系原作者