给GridView添加列头复选框

 1 using DevExpress.XtraEditors.Drawing;
 2 using DevExpress.XtraEditors.Repository;
 3 using DevExpress.XtraEditors.ViewInfo;
 4 using DevExpress.XtraGrid.Views.Grid;
 5 using System;
 6 using System.Collections.Generic;
 7 using System.Drawing;
 8 using System.Linq;
 9 using System.Text;
10 
11     public static class Draw
12     {
13         /// <summary>
14         /// 为列头绘制CheckBox
15         /// </summary>
16         /// <param name="view">GridView</param>
17         /// <param name="checkItem">RepositoryItemCheckEdit</param>
18         /// <param name="fieldName">需要绘制Checkbox的列名</param>
19         /// <param name="e">ColumnHeaderCustomDrawEventArgs</param>
20         public static void DrawHeaderCheckBox(this GridView view, RepositoryItemCheckEdit checkItem, string fieldName, ColumnHeaderCustomDrawEventArgs e)
21         {
22             /*说明:
23              *参考:https://www.devexpress.com/Support/Center/Question/Details/Q354489
24              *在CustomDrawColumnHeader中使用
25              *eg:
26              * private void gvCabChDetail_CustomDrawColumnHeader(object sender, DevExpress.XtraGrid.Views.Grid.ColumnHeaderCustomDrawEventArgs e)
27              * {
28              * GridView _view = sender as GridView;
29              * _view.DrawHeaderCheckBox(CheckItem, "Check", e);
30              * }
31              */
32             if (e.Column != null && e.Column.FieldName.Equals(fieldName))
33             {
34                 e.Info.InnerElements.Clear();
35                 e.Painter.DrawObject(e.Info);
36                 DrawCheckBox(checkItem, e.Graphics, e.Bounds, getCheckedCount(view, fieldName) == view.DataRowCount);
37                 e.Handled = true;
38             }
39         }
40         private static void DrawCheckBox(RepositoryItemCheckEdit checkItem, Graphics g, Rectangle r, bool Checked)
41         {
42             CheckEditViewInfo _info;
43             CheckEditPainter _painter;
44             ControlGraphicsInfoArgs _args;
45             _info = checkItem.CreateViewInfo() as CheckEditViewInfo;
46             _painter = checkItem.CreatePainter() as CheckEditPainter;
47             _info.EditValue = Checked;
48 
49             _info.Bounds = r;
50             _info.PaintAppearance.ForeColor = Color.Black;
51             _info.CalcViewInfo(g);
52             _args = new ControlGraphicsInfoArgs(_info, new DevExpress.Utils.Drawing.GraphicsCache(g), r);
53             _painter.Draw(_args);
54             _args.Cache.Dispose();
55         }
56         private static int getCheckedCount(GridView view, string filedName)
57         {
58             int count = 0;
59             for (int i = 0; i < view.DataRowCount; i++)
60             {
61                 object _cellValue = view.GetRowCellValue(i, view.Columns[filedName]);
62                 if (_cellValue == null) continue;
63                 if (string.IsNullOrEmpty(_cellValue.ToString().Trim())) continue;
64                 bool _checkStatus = false;
65                 if (bool.TryParse(_cellValue.ToString(), out _checkStatus))
66                 {
67                     if (_checkStatus)
68                         count++;
69                 }
70             }
71             return count;
72         }
73 }

使用方法:

1 RepositoryItemCheckEdit CheckItem = new RepositoryItemCheckEdit();
2 const string gcCheckFieldName = "勾选";
3 private void gvLampConfig_CustomDrawColumnHeader(object sender, ColumnHeaderCustomDrawEventArgs e)
4 {
5   GridView _view = sender as GridView;
6   Draw.DrawHeaderCheckBox(gridView1, CheckItem, gcCheckFieldName, e);
7 }

 

上一篇:c#-DevExpress控件EditMask属性的DateTime格式(以毫秒为单位)


下一篇:c#-DevExpress MemoEdit控件比TextEdit重很多吗?