GridControl 控件中自带有复选框,而不需要自己另外加一列CheckBox。
但是操作这个复选框确实相当的蛋疼,它没有相关的事件处理,我到官网去查了下,官网采用的是重新写一个控件的所有操作方法。
需要去官网的:传送门
个人认为过于麻烦,重新写了一个简单的方法来操作,
具体操作如下:
1.设置GridControl 控件里面的子控件GridView中OptionSelection属性,如图1:
MultiSelect设置为true
MultiSelectMode设置为CheckBoxRowSelect

2.点击事件操作的方法,代码如下:
private void gridCtrlContrDealSum_MouseUp(object sender, MouseEventArgs e)
{
try
{
//获取鼠标操作的行
DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitInfo hi = gridViewContrDealSum.CalcHitInfo(new Point(e.X, e.Y));
if (hi.RowHandle < 0 && hi.Column == null)
{
return;
}
//标题行中复选框默认名字是Selection
if (hi.Column.Caption == "Selection")
{
//选择的行
int[] selectedRow = gridViewContrDealSum.GetSelectedRows();
//点击全选,或取消全选
if (hi.RowHandle < 0)
{
int count = gridViewContrDealSum.RowCount;
if (selectedRow.Length == count)
{
//取消全选
gridCtrlDealList.DataSource = null;
}
else
{
//全选
contractCodes = new List<string>();
SetClickGrid(this.controller.GetRecordList());
}
}
else
{
//选择行的数量小于1
if (selectedRow.Length < 1)
{
gridCtrlDealList.DataSource = null;
return;
}
contractCodes = new List<string>();
//contractCodes这边是用一个List来存储被选中行gcc_Contract_Code的值
for (int i = 0; i < selectedRow.Length; i++)
{
string value = gridViewContrDealSum.GetRowCellValue(selectedRow[i], gcc_Contract_Code).ToString();
contractCodes.Add(value);
}
//重新绑定数据
SetClickGrid(this.controller.GetRecordList());
}
}
}
catch (Exception ex)
{
LoggingHelper.Error(ex.Message);
}
}
至于为什么要用MouseUp这个事件,大家可以自行尝试下其他方法。
3.怎么设置默认全选还是取消全选,在开始绑定完数据的时候,加上下面代码:
for (int i = 0; i < gridViewContrDealSum.RowCount; i++)
{
gridViewContrDealSum.SelectRow(i);
}
好的,方法介绍完毕,发个样子图给大家看看,图2。

文章评论