DevExpress Grid使用checkBox选中的方法
到官网得到消息自13.2版本后的Dev Grid中均内置了CheckBox列多选功能。在寻找答案的过程的成果进行记录。
一、13.2版本以后用法
- 启用多选列 
 对Gird中的View进行以下属性设置:gridView1.OptionsSelection.MultiSelect = true; 
 gridView1.OptionsSelection.MultiSelectMode = GridMultiSelectMode.CheckBoxRowSelect;
- 清除当前选择 
 在选中列时后,可配置在选中列以外的地方点击时候会清除当前的选择。14以后才有此功能
 gridView1.OptionsSelection.ResetSelectionClickOutsideCheckboxSelector = true;
- 获取选中的行
二、早起版本实现 相关链接:http://www.devexpress.com/Support/Center/Example/Details/E1271 - GridCheckMarksSelection类
  1 public class GridCheckMarksSelection {
 2 protected GridView _view;
 3 protected ArrayList selection;
 4 GridColumn column;
 5 RepositoryItemCheckEdit edit;
 6 const int CheckboxIndent = 4;
 7
 8 public GridCheckMarksSelection() {
 9 selection = new ArrayList();
 10 }
 11
 12 public GridCheckMarksSelection(GridView view) : this() {
 13 View = view;
 14 }
 15 public GridView View {
 16 get { return _view; }
 17 set {
 18 if (_view != value) {
 19 Detach();
 20 Attach(value);
 21 }
 22 }
 23 }
 24 public GridColumn CheckMarkColumn { get { return column; } }
 25
 26 public int SelectedCount { get { return selection.Count; } }
 27 public object GetSelectedRow(int index) {
 28 return selection[index];
 29 }
 30 public int GetSelectedIndex(object row) {
 31 return selection.IndexOf(row);
 32 }
 33 public void ClearSelection() {
 34 selection.Clear();
 35 Invalidate();
 36 }
 37 public void SelectAll() {
 38 selection.Clear();
 39 // fast (won't work if the grid is filtered)
 40 //if(_view.DataSource is ICollection)
 41 // selection.AddRange(((ICollection)_view.DataSource));
 42 //else
 43 // slow:
 44 for (int i = 0; i < _view.DataRowCount; i++)
 45 selection.Add(_view.GetRow(i));
 46 Invalidate();
 47 }
 48 public void SelectGroup(int rowHandle, bool select) {
 49 if (IsGroupRowSelected(rowHandle) && select) return;
 50 for (int i = 0; i < _view.GetChildRowCount(rowHandle); i++) {
 51 int childRowHandle = _view.GetChildRowHandle(rowHandle, i);
 52 if (_view.IsGroupRow(childRowHandle))
 53 SelectGroup(childRowHandle, select);
 54 else
 55 SelectRow(childRowHandle, select, false);
 56 }
 57 Invalidate();
 58 }
 59 public void SelectRow(int rowHandle, bool select) {
 60 SelectRow(rowHandle, select, true);
 61 }
 62 public void InvertRowSelection(int rowHandle) {
 63 if (View.IsDataRow(rowHandle)) {
 64 SelectRow(rowHandle, !IsRowSelected(rowHandle));
 65 }
 66 if (View.IsGroupRow(rowHandle)) {
 67 SelectGroup(rowHandle, !IsGroupRowSelected(rowHandle));
 68 }
 69 }
 70 public bool IsGroupRowSelected(int rowHandle) {
 71 for (int i = 0; i < _view.GetChildRowCount(rowHandle); i++) {
 72 int row = _view.GetChildRowHandle(rowHandle, i);
 73 if (_view.IsGroupRow(row)) {
 74 if (!IsGroupRowSelected(row)) return false;
 75 } else
 76 if (!IsRowSelected(row)) return false;
 77 }
 78 return true;
 79 }
 80 public bool IsRowSelected(int rowHandle) {
 81 if (_view.IsGroupRow(rowHandle))
 82 return IsGroupRowSelected(rowHandle);
 83
 84 object row = _view.GetRow(rowHandle);
 85 return GetSelectedIndex(row) != -1;
 86 }
 87
 88 protected virtual void Attach(GridView view) {
 89 if (view == null) return;
 90 selection.Clear();
 91 this._view = view;
 92 view.BeginUpdate();
 93 try {
 94 edit = view.GridControl.RepositoryItems.Add("CheckEdit") as RepositoryItemCheckEdit;
 95
 96 column = view.Columns.Add();
 97 column.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.False;
 98 column.Visible = true;
 99 column.VisibleIndex = 0;
 100 column.FieldName = "CheckMarkSelection";
 101 column.Caption = "Mark";
 102 column.OptionsColumn.ShowCaption = false;
 103 column.OptionsColumn.AllowEdit = false;
 104 column.OptionsColumn.AllowSize = false;
 105 column.UnboundType = DevExpress.Data.UnboundColumnType.Boolean;
 106 column.Width = GetCheckBoxWidth();
 107 column.ColumnEdit = edit;
 108
 109 view.Click += new EventHandler(View_Click);
 110 view.CustomDrawColumnHeader += new ColumnHeaderCustomDrawEventHandler(View_CustomDrawColumnHeader);
 111 view.CustomDrawGroupRow += new RowObjectCustomDrawEventHandler(View_CustomDrawGroupRow);
 112 view.CustomUnboundColumnData += new CustomColumnDataEventHandler(view_CustomUnboundColumnData);
 113 view.KeyDown += new KeyEventHandler(view_KeyDown);
 114 view.RowStyle += new RowStyleEventHandler(view_RowStyle);
 115 } finally {
 116 view.EndUpdate();
 117 }
 118 }
 119 protected virtual void Detach() {
 120 if (_view == null) return;
 121 if (column != null)
 122 column.Dispose();
 123 if (edit != null) {
 124 _view.GridControl.RepositoryItems.Remove(edit);
 125 edit.Dispose();
 126 }
 127
 128 _view.Click -= new EventHandler(View_Click);
 129 _view.CustomDrawColumnHeader -= new ColumnHeaderCustomDrawEventHandler(View_CustomDrawColumnHeader);
 130 _view.CustomDrawGroupRow -= new RowObjectCustomDrawEventHandler(View_CustomDrawGroupRow);
 131 _view.CustomUnboundColumnData -= new CustomColumnDataEventHandler(view_CustomUnboundColumnData);
 132 _view.KeyDown -= new KeyEventHandler(view_KeyDown);
 133 _view.RowStyle -= new RowStyleEventHandler(view_RowStyle);
 134
 135 _view = null;
 136 }
 137 protected int GetCheckBoxWidth() {
 138 DevExpress.XtraEditors.ViewInfo.CheckEditViewInfo info = edit.CreateViewInfo() as DevExpress.XtraEditors.ViewInfo.CheckEditViewInfo;
 139 int width = 0;
 140 GraphicsInfo.Default.AddGraphics(null);
 141 try {
 142 width = info.CalcBestFit(GraphicsInfo.Default.Graphics).Width;
 143 } finally {
 144 GraphicsInfo.Default.ReleaseGraphics();
 145 }
 146 return width + CheckboxIndent * 2;
 147 }
 148 protected void DrawCheckBox(Graphics g, Rectangle r, bool Checked) {
 149 DevExpress.XtraEditors.ViewInfo.CheckEditViewInfo info;
 150 DevExpress.XtraEditors.Drawing.CheckEditPainter painter;
 151 DevExpress.XtraEditors.Drawing.ControlGraphicsInfoArgs args;
 152 info = edit.CreateViewInfo() as DevExpress.XtraEditors.ViewInfo.CheckEditViewInfo;
 153 painter = edit.CreatePainter() as DevExpress.XtraEditors.Drawing.CheckEditPainter;
 154 info.EditValue = Checked;
 155 info.Bounds = r;
 156 info.CalcViewInfo(g);
 157 args = new DevExpress.XtraEditors.Drawing.ControlGraphicsInfoArgs(info, new DevExpress.Utils.Drawing.GraphicsCache(g), r);
 158 painter.Draw(args);
 159 args.Cache.Dispose();
 160 }
 161 void Invalidate() {
 162 _view.CloseEditor();
 163 _view.BeginUpdate();
 164 _view.EndUpdate();
 165 }
 166 void SelectRow(int rowHandle, bool select, bool invalidate) {
 167 if (IsRowSelected(rowHandle) == select) return;
 168 object row = _view.GetRow(rowHandle);
 169 if (select)
 170 selection.Add(row);
 171 else
 172 selection.Remove(row);
 173 if (invalidate) {
 174 Invalidate();
 175 }
 176 }
 177 voidview_CustomUnboundColumnData(object sender, CustomColumnDataEventArgs e) {
 178 if (e.Column == CheckMarkColumn) {
 179 if (e.IsGetData)
 180 e.Value = IsRowSelected(View.GetRowHandle(e.ListSourceRowIndex));
 181 else
 182 SelectRow(View.GetRowHandle(e.ListSourceRowIndex), (bool)e.Value);
 183 }
 184 }
 185 voidview_KeyDown(object sender, KeyEventArgs e) {
 186 if (View.FocusedColumn != column || e.KeyCode != Keys.Space) return;
 187 InvertRowSelection(View.FocusedRowHandle);
 188 }
 189 voidView_Click(object sender, EventArgs e) {
 190 GridHitInfo info;
 191 Point pt = _view.GridControl.PointToClient(Control.MousePosition);
 192 info = _view.CalcHitInfo(pt);
 193 if (info.Column == column) {
 194 if (info.InColumn) {
 195 if (SelectedCount == _view.DataRowCount)
 196 ClearSelection();
 197 else
 198 SelectAll();
 199 }
 200 if (info.InRowCell) {
 201 InvertRowSelection(info.RowHandle);
 202 }
 203 }
 204 if (info.InRow && _view.IsGroupRow(info.RowHandle) && info.HitTest != GridHitTest.RowGroupButton) {
 205 InvertRowSelection(info.RowHandle);
 206 }
 207 }
 208 voidView_CustomDrawColumnHeader(object sender, ColumnHeaderCustomDrawEventArgs e) {
 209 if (e.Column == column) {
 210 e.Info.InnerElements.Clear();
 211 e.Painter.DrawObject(e.Info);
 212 DrawCheckBox(e.Graphics, e.Bounds, SelectedCount == _view.DataRowCount);
 213 e.Handled = true;
 214 }
 215 }
 216 voidView_CustomDrawGroupRow(object sender, RowObjectCustomDrawEventArgs e) {
 217 DevExpress.XtraGrid.Views.Grid.ViewInfo.GridGroupRowInfo info;
 218 info = e.Info as DevExpress.XtraGrid.Views.Grid.ViewInfo.GridGroupRowInfo;
 219
 220 info.GroupText = "" + info.GroupText.TrimStart();
 221 e.Info.Paint.FillRectangle(e.Graphics, e.Appearance.GetBackBrush(e.Cache), e.Bounds);
 222 e.Painter.DrawObject(e.Info);
 223
 224 Rectangle r = info.ButtonBounds;
 225 r.Offset(r.Width + CheckboxIndent * 2 - 1, 0);
 226 DrawCheckBox(e.Graphics, r, IsGroupRowSelected(e.RowHandle));
 227 e.Handled = true;
 228 }
 229 voidview_RowStyle(object sender, RowStyleEventArgs e) {
 230 if (IsRowSelected(e.RowHandle)) {
 231 e.Appearance.BackColor = SystemColors.Highlight;
 232 e.Appearance.ForeColor = SystemColors.HighlightText;
 233 }
 234 }
 235 }GridCheckMarksSelection类 
- 使用方法 
1 public Form1() 
 2 {
 3 InitializeComponent();
 4 new GridCheckMarksSelection(gridView1);
 5 }
 
- GridCheckMarksSelection类
DevExpress Grid使用checkBox选中的方法的更多相关文章
- [转]extjs grid的Ext.grid.CheckboxSelectionModel默认选中解决方法
		原文地址:http://379548695.iteye.com/blog/1167234 grid的复选框定义如下: var sm = new Ext.grid.CheckboxSelection ... 
- [TimLinux] JavaScript 判断 input checkbox选中的方法
		1. input属性 <label> <span>选择</span> <input type="checkbox" name=" ... 
- checkbox选中的问题(Ajax.BeginForm)
		判断checkbox选中的方法方法一:if ($("#checkbox-id")get(0).checked) { // do something} 方法二:if($('#chec ... 
- dev  gridview自动列宽和单元、行、checkbox选中和多选
		#region 自动列宽 for (int I = 0; I < gridView1.Columns.Count; I++) { this.gridView1.BestFitColumns(); ... 
- WPF ListBoxItem模板中添加CheckBox选中问题
		原文:WPF ListBoxItem模板中添加CheckBox选中问题 是这样的,需要一个ListBox来展示照片,并添加一个选中的CheckBox.这就需要对ListBox的ItemTemplate ... 
- easyui 》 radio取值,checkbox取值,select取值,radio选中,checkbox选中,select选中
		获取一组radio被选中项的值var item = $('input[@name=items][@checked]').val();获取select被选中项的文本var item = $(" ... 
- jquery checkbox选中状态
		<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ... 
- jquery checkbox 选中 全选 插件
		checkbox 选中 全选 在项目中经常用到,但是不同的程序员写出的东西各有差异,在此整合了jquery checkbox插件,用起来很方便,也总结了我们项目中通常会出现问题的地方,一行代码搞定. ... 
- jquery radio取值,checkbox取值,select取值,radio选中,checkbox选中,select选中
		jQuery获取Select选择的Text和Value: 语法解释: 1. $("#select_id").change(function(){//code...}); //为Se ... 
随机推荐
- 解决nim db_mysql could not load: libmysql.dll的问题
			title: 解决nim db_mysql could not load: libmysql.dll的问题 nim中使用db_mysql 操作数据库的代码看起来很简单: import db_mysql ... 
- mysql事务特点总结
			1.mysql事务有4个隔离级别,以及会出现的问题如下图: 2. 脏读: 开启事务A,B.事务A在还没有提交的情况下,假如第一次查询id=1的用户的age=24.事务B执行了update 表 set ... 
- PC能替代服务器吗?
			PC能替代服务器吗?全方位解析二者区别_华为服务器_服务器x86服务器-中关村在线http://server.zol.com.cn/536/5366835_all.html 
- python学习第二次笔记
			python学习第二次记录 1.格式化输出 name = input('请输入姓名') age = input('请输入年龄') height = input('请输入身高') msg = " ... 
- sql注入2
			一.查询数据库的版本号 http://10.1.2.5:10631/sqli/Less-2/?id=-1 union select 1,2,version() 二.查询数据库中所有的库名 http:/ ... 
- Flask开发基础
			Flask是一个使用Python编写的轻量级Web应用框架. 模板引擎使用的Jinja2 Flask框架简单易学,但是其保留了扩展的弹性,可以使用Flask-extension 加入ORM ,窗体验证 ... 
- oracle  mysql 比较
			转载:https://www.cnblogs.com/qq765065332/p/9293029.html 一.数据的存储结构 mysql: 1.对数据的管理可以有很多个用户,登录用户后可以看到该用户 ... 
- 神州数码DEIGRP路由协议配置
			实验要求:了解DEIGRP及其配置方法 拓扑如下 R1 enable 进入特权模式 config 进入全局模式 hostname R1 修改名称 interface l0 进入端口 ip addres ... 
- Datediff的使用(统计本日,昨日,本周,本月)
			//统计本日,昨日,本周,本月添加的产品总数 //日期 DateTime DT = DateTime.Now; string day=DT.Date.ToS ... 
- [转]https://www.jianshu.com/p/06443248f4d8
			eos是什么? 原文 https://www.jianshu.com/p/06443248f4d8 简介 用一句话来定义eos,即:区块链操作系统,支持在它之上构建dapp,支持智能合约.帐户.身份验 ... 
