首页 > 代码库 > DevExpress Grid使用checkBox选中的方法
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类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 =http://www.mamicode.com/ 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 else172 selection.Remove(row);173 if (invalidate) {174 Invalidate();175 }176 }177 void view_CustomUnboundColumnData(object sender, CustomColumnDataEventArgs e) {178 if (e.Column == CheckMarkColumn) {179 if (e.IsGetData)180 e.Value =http://www.mamicode.com/ IsRowSelected(View.GetRowHandle(e.ListSourceRowIndex));181 else182 SelectRow(View.GetRowHandle(e.ListSourceRowIndex), (bool)e.Value);183 }184 }185 void view_KeyDown(object sender, KeyEventArgs e) {186 if (View.FocusedColumn != column || e.KeyCode != Keys.Space) return;187 InvertRowSelection(View.FocusedRowHandle);188 }189 void View_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 else198 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 void View_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 void View_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 void view_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 }
- 使用方法
1 public Form1()2 {3 InitializeComponent();4 new GridCheckMarksSelection(gridView1);5 }
DevExpress Grid使用checkBox选中的方法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。