参与程序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)
{
|
dgvWarn.EndEdit();
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;
}
}
}
} |