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 ...
随机推荐
- CNN
<卷积神经网络详述> <卷积神经网络——雨石博客> 学习参考:http://blog.csdn.net/stdcoutzyx/article/details/4159 ...
- 北大poj- 1012
Joseph Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 56348 Accepted: 21526 Descript ...
- Selenium-java测试环境搭建
1.1背景 Selenium也是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE.Mozilla Firefox.Mozilla ...
- LGOJ P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
今天我来给大家带来一片蒟蒻题解 ~~真香 LGOJ P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm 题目描述 每年,在威斯康星州,奶牛们都会穿上 ...
- Java学习笔记(7)
File类用于处理文件和目录 isDirectory()用于检查当前对象是否目录,isFile()用于检查当前对象是否文件 构造File对象时,传入的路径不一定要求存在,要通过exists()方法判断 ...
- 微信小程序页面跳转,带参数跳转
1. wx.navigateTo (保留当前页面,跳转到应用内的某个页面,使用wx.navigateBack可以返回到原页面.) 路径:只能跳转非tabbar路径 参数: 'path?key=v ...
- There is no getter for property named 'user' in 'class com.jyr.wh.domain.User' 异常
今天在使用mybatis时,出现了一个问题:There is no getter for property named 'user' in 'class com.jyr.wh.domain.User, ...
- jQuery-3.事件篇---事件绑定与解绑
on()的多事件绑定 之前学的鼠标事件,表单事件与键盘事件都有个特点,就是直接给元素绑定一个处理函数,所有这类事件都是属于快捷处理.翻开源码其实可以看到,所有的快捷事件在底层的处理都是通过一个&quo ...
- 前端工程化基础-vue
由浅入深支持更多功能 1.安装最新版本的node.js和NPM,并了解NPM基本用法. 2.创建一个目录demo.使用npm 初始化配置: npm init ,执行后会有一系列选项,可按回车快速确认 ...
- UVa10129(还没ac)各种re,o(╥﹏╥)o
这是一道欧拉回路题 欧拉回路:就是一个路径包括每条边恰好一次. 判断是否满足欧拉回路.首先是图是联通的.其次图中每个点的入度等于出度.如果是欧拉路径的话,满足奇点只能等于2或0,并且对于有向图,奇点的 ...