DevExpress.XtraGrid winform试用分享
DevExpress.XtraGrid在winform里使用还挺麻烦,为了减少重复代码和代码复用,本人针对DevExpress.XtraGrid封装了一个Form的基类,其中涵盖了DevExpress.XtraGrid的基本用法,本文没有多少营养大家慎重观评啊,否则浪费您看岛国爱情动作片的宝贵时间本博概不负责!哈哈。
关注点: WinForm项目使用封装、继承;DevExpress.XtraGrid在WinForm的基本运用。
前戏:
本人已经逃离上海,回老家上成都发展了(继续做开发,到传统软件公司做安卓和.net c/s方向的开发)。求关照,求介绍私活(速度赚钱还房贷啊!!!回成都收入减少那是刚刚嘀)。认识多年的朋友邀请我作为的战略合作伙伴加入他成都的公司,本作离老家(重庆)近可经常回去和妻儿呆在一起,且收入下降的比例还可以接受,遂接受邀请,心不甘情不愿的回来了。去上海十一年,好像没什么收获啊,临走前想找个15k的工作说服自己留下来,天可怜见,不能如愿啊。
正文:
1)DevExpress.XtraGrid基本技巧
1.DevExpress控件组中的GridControl控件不能使横向滚动条有效。现象:控件中的好多列都挤在一起,列宽都变的很小,根本无法正常浏览控件单元格中的内容。
解决:
gridView1.OptionsView.ColumnAutoWidth属性是true,即各列的宽度自动调整,你把它设成false,就会出现了。
2.使单元格不可编辑。
gridcontrol -->gridview -->OptionsBehavior -->Editable=false
3.去除"Drag a Column Header Here To Group by that Column"或者改为中文
属性Gridview->Option View->Show Group Panel=false,就好了 ,“gridView.GroupPanelText”是设置改默认文字的属性。
4.数据绑定
(2) 在出现的窗体中,点击左边的进行列名的编辑。点击上方的
可添加一列,
插入一列,
移除一列。点击
后在右边的属性面板中找到Caption设置显示的列标题和FieldName设置该列绑定数据的字段名,Visible设置列是否隐藏。
绑定代码:
gridControl2.DataSource = od.data_select("select * from tablename").Tables[0];//od是数据库操作类,data_select返回DataSet类型,绑定DataTable类型
5.选择某行数据触发时间
gridView2.RowClick += new DevExpress.XtraGrid.Views.Grid.RowClickEventHandler(gridView2_RowClick);
这样设置以后必须点击最左边的行编号才可以触发事件,需要设置gridcontrol -->gridview -->OptionsBehavior -->Editable=false即可点击任意单元格触发事件。
6.选择某行后获取当前表格数据
this.textBox1.Text = gridView2.GetDataRow(e.RowHandle)["列名"].ToString();
7.设置奇、偶行交替颜色
(1) OptionsView.EnableAppearanceEvenRow =
true;
OptionsView.EnableAppearanceOddRow =
true
;
(2) 设置Appearance.EvenRow.BackColor和Appearance.OddRow.BackColor
8.在每行第一列显示行号
(1) this.gridView2.IndicatorWidth = 30;//设置显示行号的列宽
(2) 设置动作gridView2.CustomDrawRowIndicator += new DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventHandler(gridView2_CustomDrawRowIndicator);
1
2
3
4
5
6
7
8
|
//添加行号 void gridView2_CustomDrawRowIndicator( object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e) { if (e.Info.IsRowIndicator && e.RowHandle >= 0) { e.Info.DisplayText = (e.RowHandle + 1).ToString(); } } |
9.根据绑定的数据源自动产生列
gridView2.PopulateColumns();
2)代码:
基类窗体代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 | using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace DailyAuditApp { public class XtraGridListBaseForm : Form { protected DevExpress.XtraGrid.GridControl gridCtrl; protected DevExpress.XtraGrid.Views.Grid.GridView gridView; private string groupPanelText = "操作提示:拖动某个列标题到此处即可按该列分组统计。" ; /// <summary> /// 分组面板提示文本 /// </summary> public string GroupPanelText { get { return groupPanelText; } set { groupPanelText = value; gridView.GroupPanelText = value; gridView.Invalidate(); } } protected bool isDisplayRowIndexNo = true ; /// <summary> /// 表格是否显示行号 /// </summary> public bool IsDisplayRowIndexNo { get { return isDisplayRowIndexNo; } set { isDisplayRowIndexNo = value; } } private bool enableAppearanceEvenRow = true ; /// <summary> /// 隔行显示不同的颜色 /// </summary> public bool EnableAppearanceEvenRow { get { return enableAppearanceEvenRow; } set { enableAppearanceEvenRow = value; gridView.OptionsView.EnableAppearanceEvenRow = true ; gridView.Invalidate(); } } /// <summary> /// 窗体宽度匹配 工作主屏幕 /// </summary> private bool fullScreenWidth = true ; public bool FullScreenWidth { get { return fullScreenWidth; } set { fullScreenWidth = value;} } /// <summary> /// 构造函数,创建GridControl和GridView /// 定制并初始化Form /// </summary> public XtraGridListBaseForm() { this .Icon = Properties.Resources.aidpoint_ico; this .gridCtrl = new DevExpress.XtraGrid.GridControl(); this .gridView = new DevExpress.XtraGrid.Views.Grid.GridView(); this .gridCtrl.Dock = DockStyle.Fill; // // gridCtrl // this .gridCtrl.Location = new System.Drawing.Point(156, 130); this .gridCtrl.MainView = this .gridView; this .gridCtrl.Name = "gridCtrl" ; this .gridCtrl.Size = new System.Drawing.Size(400, 200); this .gridCtrl.TabIndex = 0; this .gridCtrl.ViewCollection.AddRange( new DevExpress.XtraGrid.Views.Base.BaseView[] { this .gridView}); // // gridView // this .gridView.GridControl = this .gridCtrl; this .gridView.Name = "gridView" ; gridView.IndicatorWidth = 30; gridView.GroupPanelText = groupPanelText; //展现表格控件 this .Controls.Add(gridCtrl); gridCtrl.BringToFront(); } protected override void OnLoad(EventArgs e) { base .OnLoad(e); //主屏幕工作区宽度自适应 if (fullScreenWidth) { this .Width = Screen.PrimaryScreen.WorkingArea.Width - 2; this .Top = (Screen.PrimaryScreen.WorkingArea.Height - this .Height) / 2; this .Left = 1; } //隔行显示 gridView.OptionsView.EnableAppearanceEvenRow = enableAppearanceEvenRow; if (gridView.GroupCount > 0) gridView.ExpandAllGroups(); //自动展开 gridView.EndGrouping += new EventHandler(gridView_EndGrouping); //表格显示行号 if (isDisplayRowIndexNo) { gridView.CustomDrawRowIndicator += new DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventHandler(gridView_CustomDrawRowIndicator); } //默认数据源 if (gridCtrl.DataSource == null ) { gridView.OptionsBehavior.Editable = false ; SetGridViewDataSource(); } } /// <summary> /// 拖拽(列表标头)分组后自动展开 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void gridView_EndGrouping( object sender, EventArgs e) { if (gridView.GroupCount > 0) gridView.ExpandAllGroups(); } /// <summary> /// 自动添加行号 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void gridView_CustomDrawRowIndicator( object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e) { if (e.Info.IsRowIndicator && e.RowHandle >= 0) { e.Info.DisplayText = (e.RowHandle + 1).ToString(); } } /// <summary> /// 回车键焦点跳转到下一TabOrder的控件上,ESC关闭窗口 /// </summary> /// <param name="msg"></param> /// <param name="keyData"></param> /// <returns></returns> protected override bool ProcessCmdKey( ref Message msg, Keys keyData) { if ((keyData == Keys.Enter) && (!(ActiveControl is Button))) { System.Windows.Forms.SendKeys.Send( "{TAB}" ); return true ; } if (keyData == Keys.Escape) { this .Close(); } return base .ProcessCmdKey( ref msg, keyData); } /// <summary> /// 设置表格数据源 /// </summary> protected virtual void SetGridViewDataSource() { var dt = new DataTable(); dt.Columns.Add( new DataColumn( "提示信息" , typeof ( string ))); var dr = dt.NewRow(); dr.ItemArray = new string []{ "没有记录。" }; dt.Rows.Add(dr); gridCtrl.DataSource = dt; } } } |
业务窗体代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using DataAccess; using DailyAuditApp.DailyAuditProxy; namespace DailyAuditApp { public partial class Form1 : XtraGridListBaseForm { DailyAuditService biz = new DailyAuditService(); public Form1() { InitializeComponent(); } private void button1_Click( object sender, EventArgs e) { using (aidpoint_cloudEntities db = new aidpoint_cloudEntities()) { var ds = db.ExecuteQuery( "SELECT * FROM [aidpoint_cloud].[dbo].[样本]" ); ds.Tables[0].TableName = "付款方式统计表" ; biz.SyncClientBizData( "Aidpoint4006005262" , ds); } } protected override void SetGridViewDataSource() { gridCtrl.DataSource = new DataAccess.aidpoint_cloudEntities().付款方式统计表; gridView.Columns[ "业态名称" ].GroupIndex = 0; } } } |
3)效果截图:
后戏:
1)风尘仆仆赶回去朋友却没有来接我,背一包,提两包。看来“战略合作伙伴”并不代表重视啊,再忙也不用开口说的啊...
2) 已经入职了。
作者:数据酷软件
出处:https://www.cnblogs.com/datacool/p/dev_XtraGrid_datacool_2014.html
关于作者:20年编程从业经验,持续关注MES/ERP/POS/WMS/工业自动化
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明。
联系方式: qq:71008973;wx:6857740733
基于人脸识别的考勤系统 地址: https://gitee.com/afeng124/viewface_attendance_ext
自己开发安卓应用框架 地址: https://gitee.com/afeng124/android-app-frame
WPOS(warehouse+pos) 后台演示地址: http://47.239.106.75:8080/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构