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。
文章评论