C# Winform中DataGridView 设置全选/取消
来源:互联网 发布:黄牛刷票软件 编辑:程序博客网 时间:2024/06/06 04:04
public partialclass Form1 : Form
{
public Form1()
{
InitializeComponent();
}
privatevoid button1_Click(object sender, EventArgs e)
{
DataTable dt =new DataTable();
DataColumn column;
for (int i= 0; i< 4; i++)
{
if (i== 3)
{
column =new DataColumn();
column.ColumnName ="column"+ i;
column.DataType =typeof(Boolean);
dt.Columns.Add(column);
dataGridView1.DataSource = dt;
}
else
{
column =new DataColumn();
column.ColumnName ="column"+ i;
column.DataType =typeof(string);
dt.Columns.Add(column);
}
}
for (int i= 0; i< 4; i++)
{
DataRow row = dt.NewRow();
for (int j= 0; j< 4; j++)
{
if (j== 3)
{
row[j] =false;
}
else
{
row[j] = i.ToString();
}
}
dt.Rows.Add(row);
}
dataGridView1.DataSource = dt;
datagridviewCheckboxHeaderCell ch =new datagridviewCheckboxHeaderCell();
ch.OnCheckBoxClicked +=new datagridviewcheckboxHeaderEventHander(ch_OnCheckBoxClicked);
//第四列为DataGridViewCheckBoxColumn
DataGridViewCheckBoxColumn checkboxCol= this.dataGridView1.Columns[3]as DataGridViewCheckBoxColumn;
checkboxCol.HeaderCell = ch;
checkboxCol.HeaderCell.Value =string.Empty;//消除列头checkbox旁出现的文字
}
void ch_OnCheckBoxClicked(object sender, Form1.datagridviewCheckboxHeaderEventArgs e)
{
foreach (DataGridViewRow dgvRowin this.dataGridView1.Rows)
{
if (e.CheckedState)
{
dgvRow.Cells[3].Value= true;
}
else
{
dgvRow.Cells[3].Value= false;
}
}
}
//定义触发单击事件的委托
publicdelegate void datagridviewcheckboxHeaderEventHander(object sender, datagridviewCheckboxHeaderEventArgs e);
//定义包含列头checkbox选择状态的参数类
class datagridviewCheckboxHeaderEventArgs : EventArgs
{
privatebool checkedState= false;
publicbool CheckedState
{
get {return checkedState; }
set { checkedState= value; }
}
}
//定义继承于DataGridViewColumnHeaderCell的类,用于绘制checkbox,定义checkbox鼠标单击事件
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;
publicevent datagridviewcheckboxHeaderEventHander OnCheckBoxClicked;
//绘制列头checkbox
protectedoverride 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)- 1;//列头checkbox的X坐标
p.Y = cellBounds.Location.Y+
(cellBounds.Height /2) - (s.Height/ 2);//列头checkbox的Y坐标
_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);
}
///<summary>
/// 点击列头checkbox单击事件
///</summary>
protectedoverride 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;
//获取列头checkbox的选择状态
datagridviewCheckboxHeaderEventArgs ex= new datagridviewCheckboxHeaderEventArgs();
ex.CheckedState = _checked;
object sender= newobject();//此处不代表选择的列头checkbox,只是作为参数传递。应该列头checkbox是绘制出来的,无法获得它的实例
if (OnCheckBoxClicked!= null)
{
OnCheckBoxClicked(sender, ex);//触发单击事件
this.DataGridView.InvalidateCell(this);
}
}
base.OnMouseClick(e);
}
}
}//end class
- C# Winform中DataGridView 设置全选/取消
- C# Winform DataGridView 全选
- C# winform DataGridView 行全选反选
- winform中DataGridView全选和反选
- C# WinForm 设置DataGridView选中指定行
- Winform中DataGridView实现全选和反选
- winform datagridview 表头加全选
- C#中使用listview的checkBoxs全选和取消全选
- winform中datagridview的一些设置
- winform c# DataGridView 使用中常见问题
- C# Winform 中验证DataGridView单元格内容
- C# Winform中DataGridView的DataGridViewCheckBoxColumn使用方法
- C# Winform中DataGridView的DataGridViewCheckBoxColumn使用方法
- C# winform DataGridView中添加按钮
- c# winform 打印datagridview
- [WINFORM]C#中的DataGridView
- C# Winform的DataGridView中的chckbox如何全选,单选,多选
- datagridview里面的checkbox全选和取消全选
- [小结]VSTO addin 安装部署
- 改变命运的是自己
- Android文件命名规范
- Silverlight 玻璃质感样式超酷
- [转]PHP中$_SERVER(服务器信息)的详细参数与说明
- C# Winform中DataGridView 设置全选/取消
- Android 如何监听返回键,弹出一个退出对话框
- HTM皮质学习算法资料
- 一个招聘HR的牢骚
- 设计模式之-----工厂模式
- VC获取父进程PID
- OSI模型
- cin用法介绍
- update intellisense...