参与程序http://www.codeproject.com/KB/grid/CheckBoxHeaderCell.aspx 这里老外写的一个控件,他少了委托重载的一个方法。先写一个控件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85 |
public
delegate void CheckBoxClickedHandler( bool
state); public
class DataGridViewCheckBoxHeaderCellEventArgs : EventArgs { bool
_bChecked; public
DataGridViewCheckBoxHeaderCellEventArgs( bool
bChecked) { _bChecked = bChecked; } public
bool Checked { get
{ return
_bChecked; } } } public
class DatagridViewCheckBoxHeaderCell : DataGridViewColumnHeaderCell { Point checkBoxLocation; Size checkBoxSize; bool
_checked = false ; Point _cellLocation = new
Point(); System.Windows.Forms.VisualStyles.CheckBoxState _cbState = System.Windows.Forms.VisualStyles.CheckBoxState.UncheckedNormal; public
event CheckBoxClickedHandler OnCheckBoxClicked; public
DatagridViewCheckBoxHeaderCell() { } protected
override void Paint(System.Drawing.Graphics graphics, System.Drawing.Rectangle clipBounds, System.Drawing.Rectangle cellBounds, int
rowIndex, DataGridViewElementStates dataGridViewElementState, object
value, object
formattedValue, string
errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) { base .Paint(graphics, clipBounds, cellBounds, rowIndex, dataGridViewElementState, value, formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts); Point p = new
Point(); Size s = CheckBoxRenderer.GetGlyphSize(graphics, System.Windows.Forms.VisualStyles.CheckBoxState.UncheckedNormal); p.X = cellBounds.Location.X + (cellBounds.Width / 2) - (s.Width / 2); p.Y = cellBounds.Location.Y + (cellBounds.Height / 2) - (s.Height / 2); _cellLocation = cellBounds.Location; checkBoxLocation = p; checkBoxSize = s; if
(_checked) _cbState = System.Windows.Forms.VisualStyles. CheckBoxState.CheckedNormal; else _cbState = System.Windows.Forms.VisualStyles. CheckBoxState.UncheckedNormal; CheckBoxRenderer.DrawCheckBox (graphics, checkBoxLocation, _cbState); } protected
override void OnMouseClick(DataGridViewCellMouseEventArgs e) { Point p = new
Point(e.X + _cellLocation.X, e.Y + _cellLocation.Y); if
(p.X >= checkBoxLocation.X && p.X <= checkBoxLocation.X + checkBoxSize.Width && p.Y >= checkBoxLocation.Y && p.Y <= checkBoxLocation.Y + checkBoxSize.Height) { _checked = !_checked; if
(OnCheckBoxClicked != null ) { OnCheckBoxClicked(_checked); this .DataGridView.InvalidateCell( this ); } } base .OnMouseClick(e); } } |
然后在前台做个窗体,加个datagridview控件,加个几行,注意datagirdview有编辑状态,如果只有一行又是在编辑状态,就不起作用了。当然一般全选控件不可能在编辑状态
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 |
public
partial class Form1 : Form { public
Form1() { InitializeComponent(); } private
void Form1_Load( object
sender, EventArgs e) { //DataGridViewCheckBoxColumn colCB = new DataGridViewCheckBoxColumn(); DatagridViewCheckBoxHeaderCell cbHeader = new
DatagridViewCheckBoxHeaderCell(); //colCB.HeaderCell = cbHeader; //dataGridView1.Columns.Add(colCB); cbHeader.Value = string .Empty; cbHeader.OnCheckBoxClicked += new
CheckBoxClickedHandler(cbHeader_OnCheckBoxClicked); dataGridView1.Columns[0].HeaderCell = cbHeader; } private
void cbHeader_OnCheckBoxClicked( bool
state) { |
1
2
3
4
5
6
7
8
9 |
if
(dataGridView1.Rows.Count > 0) { for
( int
i = 0; i < dataGridView1.Rows.Count; i++) { dataGridView1.Rows[i].Cells[0].Value = state; } } } } |
datagridview表头全选,布布扣,bubuko.com
原文:http://www.cnblogs.com/Anders888/p/3569590.html