实现功能:点击单元格实现checkbox的勾选,点击头标题实现全选和非全选,记录选中的行数 (注意:this.dataList.RefreshEdit();//否则可能不全选)
//增加一列复选框
DataGridViewCheckBoxColumn columncb = new DataGridViewCheckBoxColumn();
/// <summary>
/// 窗体加载
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FrmAddOrder_Load(object sender, EventArgs e)
{
//初始化数据
this.dataList.DataSource = dataSource_NoOrder;//绑定数据源
//给datagridview加复选框的初始化
columncb.FlatStyle = FlatStyle.Standard;
columncb.HeaderText = "👆全选";
columncb.Name = "cb_check";
columncb.TrueValue = true;
columncb.FalseValue = false;
columncb.DataPropertyName = "IsChecked";
//datagridview的Name为dataList
dataList.Columns.Insert(0, columncb);
}
/// <summary>
/// 头checkbox是否选中
/// </summary>
bool headCkBoxIsChecked = false;
/// <summary>
/// 点击datagridview单元格,可以勾选该行的checkbox
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dataList_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.RowIndex == -1 && !headCkBoxIsChecked && e.ColumnIndex == 0)
{
for (int i = 0; i < dataList.Rows.Count; i++)
{
this.dataList.Rows[i].Cells["cb_check"].Value = true;
}
headCkBoxIsChecked = true;
columncb.HeaderText = "✋ 已全选";
}
else if (e.RowIndex == -1 && headCkBoxIsChecked && e.ColumnIndex == 0 )
{
for (int i = 0; i < dataList.Rows.Count; i++)
{
this.dataList.Rows[i].Cells[0].Value = false;
}
headCkBoxIsChecked = false;
columncb.HeaderText = "👆 全选";
}
else if(e.ColumnIndex == 0)
{
if ((bool)dataList.Rows[e.RowIndex].Cells["cb_check"].EditedFormattedValue == true)
{
this.dataList.Rows[e.RowIndex].Cells["cb_check"].Value = false;
}
else
{
this.dataList.Rows[e.RowIndex].Cells["cb_check"].Value = true;
}
}
this.dataList.RefreshEdit();//刷新操作,否则点击之后可能不能立即勾选
//记录选中行数
selectNum = 0;
for (int i = 0; i < this.dataList.Rows.Count; i++)
{
if ((bool)dataList.Rows[i].Cells["cb_check"].EditedFormattedValue)
{
selectNum += 1;
}
}
this.lbNum.Text = string.Format("{0} ", selectNum);
}