.net WinForm DataGridView 多表头处理方案一则
思路:重画,重载
实现:
我是使用重载表格控件来处理的代码如下:
表格初始化时:
_mergedManager = new DataGridViewHeadsMergedManager(this);
使用代码:
技巧,在属性弹出的数据窗口回车确认后,会自动添加一行表头,任意多行,先横向,后纵向自动合并;-)
1
多表头
#region 多表头
2![InBlock.gif](http://img.e-com-net.com/image/info8/15ddc02491414795b580f76d13125041.gif)
3
[
4
Category("GridX"),
5
Description("设置辅助标题"),
6
]
7
public int ColumnTitleHeight
8![ExpandedSubBlockStart.gif](http://img.e-com-net.com/image/info8/9b92fec641df4b30b08bd729d60416ef.gif)
{
9
get
10![ExpandedSubBlockStart.gif](http://img.e-com-net.com/image/info8/9b92fec641df4b30b08bd729d60416ef.gif)
{
11
return _mergedManager.ColumnTitleHeight;
12![InBlock.gif](http://img.e-com-net.com/image/info8/15ddc02491414795b580f76d13125041.gif)
13
}
14
set
15![ExpandedSubBlockStart.gif](http://img.e-com-net.com/image/info8/9b92fec641df4b30b08bd729d60416ef.gif)
{
16![InBlock.gif](http://img.e-com-net.com/image/info8/15ddc02491414795b580f76d13125041.gif)
17
_mergedManager.ColumnTitleHeight = value;
18![InBlock.gif](http://img.e-com-net.com/image/info8/15ddc02491414795b580f76d13125041.gif)
19
}
20![InBlock.gif](http://img.e-com-net.com/image/info8/15ddc02491414795b580f76d13125041.gif)
21
}
22
[
23
Category("GridX"),
24
Description("设置辅助标题"),
25
]
26
public string[] TitleHeads
27![ExpandedSubBlockStart.gif](http://img.e-com-net.com/image/info8/9b92fec641df4b30b08bd729d60416ef.gif)
{
28![InBlock.gif](http://img.e-com-net.com/image/info8/15ddc02491414795b580f76d13125041.gif)
29
get
30![ExpandedSubBlockStart.gif](http://img.e-com-net.com/image/info8/9b92fec641df4b30b08bd729d60416ef.gif)
{
31![InBlock.gif](http://img.e-com-net.com/image/info8/15ddc02491414795b580f76d13125041.gif)
32
if (this._mergedManager == null)
33
this._mergedManager = new DataGridViewHeadsMergedManager(this);
34![InBlock.gif](http://img.e-com-net.com/image/info8/15ddc02491414795b580f76d13125041.gif)
35
return _mergedManager.TitleHeads;
36![InBlock.gif](http://img.e-com-net.com/image/info8/15ddc02491414795b580f76d13125041.gif)
37![InBlock.gif](http://img.e-com-net.com/image/info8/15ddc02491414795b580f76d13125041.gif)
38![InBlock.gif](http://img.e-com-net.com/image/info8/15ddc02491414795b580f76d13125041.gif)
39
}
40
set
41![ExpandedSubBlockStart.gif](http://img.e-com-net.com/image/info8/9b92fec641df4b30b08bd729d60416ef.gif)
{
42![InBlock.gif](http://img.e-com-net.com/image/info8/15ddc02491414795b580f76d13125041.gif)
43![InBlock.gif](http://img.e-com-net.com/image/info8/15ddc02491414795b580f76d13125041.gif)
44
_mergedManager.TitleHeads = value;
45![InBlock.gif](http://img.e-com-net.com/image/info8/15ddc02491414795b580f76d13125041.gif)
46
}
47![InBlock.gif](http://img.e-com-net.com/image/info8/15ddc02491414795b580f76d13125041.gif)
48
}
49![InBlock.gif](http://img.e-com-net.com/image/info8/15ddc02491414795b580f76d13125041.gif)
50
public void ClearHeads()
51![ExpandedSubBlockStart.gif](http://img.e-com-net.com/image/info8/9b92fec641df4b30b08bd729d60416ef.gif)
{
52
_mergedManager.ClearHeads();
53
//this.ScrollBars = ScrollBars.Both;
54
}
55![InBlock.gif](http://img.e-com-net.com/image/info8/15ddc02491414795b580f76d13125041.gif)
56
private void InternalDisposeHeads()
57![ExpandedSubBlockStart.gif](http://img.e-com-net.com/image/info8/9b92fec641df4b30b08bd729d60416ef.gif)
{
58
_mergedManager.Dispose();
59
}
60![InBlock.gif](http://img.e-com-net.com/image/info8/15ddc02491414795b580f76d13125041.gif)
61
public void AppendNewHead(params string[] Caption)
62![ExpandedSubBlockStart.gif](http://img.e-com-net.com/image/info8/9b92fec641df4b30b08bd729d60416ef.gif)
{
63
//this.ScrollBars = ScrollBars.Vertical;
64
_mergedManager.AppendNewHead(Caption);
65![InBlock.gif](http://img.e-com-net.com/image/info8/15ddc02491414795b580f76d13125041.gif)
66
}
67![InBlock.gif](http://img.e-com-net.com/image/info8/15ddc02491414795b580f76d13125041.gif)
68
public void HeadRemoveAt(int index)
69![ExpandedSubBlockStart.gif](http://img.e-com-net.com/image/info8/9b92fec641df4b30b08bd729d60416ef.gif)
{
70
_mergedManager.HeadRemoveAt(index);
71![InBlock.gif](http://img.e-com-net.com/image/info8/15ddc02491414795b580f76d13125041.gif)
72
}
73![InBlock.gif](http://img.e-com-net.com/image/info8/15ddc02491414795b580f76d13125041.gif)
74
public int HeadCount
75![ExpandedSubBlockStart.gif](http://img.e-com-net.com/image/info8/9b92fec641df4b30b08bd729d60416ef.gif)
{
76
get
77![ExpandedSubBlockStart.gif](http://img.e-com-net.com/image/info8/9b92fec641df4b30b08bd729d60416ef.gif)
{
78
return _mergedManager.HeadCount;
79
}
80![InBlock.gif](http://img.e-com-net.com/image/info8/15ddc02491414795b580f76d13125041.gif)
81
}
82
#endregion
83
![None.gif](http://img.e-com-net.com/image/info8/20486711ecd34e998f0a93807eacc85f.gif)
84
![None.gif](http://img.e-com-net.com/image/info8/20486711ecd34e998f0a93807eacc85f.gif)
85
![None.gif](http://img.e-com-net.com/image/info8/20486711ecd34e998f0a93807eacc85f.gif)
86
表头代码:
略...
Demo:
先右键定义6个DataGridViewColumn列,我第二列设不可见
再在TitleHeads窗口中输
Column1,Column1,Column1,Column1,Column2,Column2
Column1,Column1,Column3,Column5,Column5,Column5
Column1,Column2,Column3,Column4,Column7,Column8
Column1,Column2,Column3,Column4,Column7,Column6
代码:
this.grid.TitleHeads = new string[] {
"Column1,Column1,Column1,Column1,Column2,Column2",
"Column1,Column1,Column3,Column5,Column5,Column5",
"Column1,Column2,Column3,Column4,Column7,Column8",
"Column1,Column2,Column3,Column4,Column7,Column6"};
贴图: