提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|使用教程|编辑:龚雪|2023-08-04 11:09:59.350|阅读 120 次
概述:本文主要介绍在DevExpress的GridView的列中,动态创建列的时如何绑定不同的编辑处理控件,欢迎下载组件体验~
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
在使用DevExpress GridView时,为了方便往往使用一些扩展函数,动态创建GridView列的编辑控件对象,然后我们可以灵活的对内容进行编辑或者使用一些弹出的对话框窗体进行处理内容的录入,本文就是介绍这一主题:在DevExpress的GridView的列中,动态创建列的时候,绑定不同的编辑处理控件。
DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。
DevExpress技术交流群8:523159565 欢迎一起进群讨论
我们创建列,为了绑定相应的数据源信息展示,一般指定列的名称和显示的列标题名称,如下是一个简单的列创建处理代码。
grv.CreateColumn("Note", "备注说明");
如果赢绑定了数据源,我们也可以根据列的FieldName进行获得列的控制权,然后给它指定不同的编辑控件,如下所示。
gridview.Columns.ColumnByFieldName("Introduction").CreateMemoEdit();
上面的CreateMemoEdit()函数就是一个简单的扩展函数,用于创建一个备注列的处理,它的编辑器控件 RepositoryItemMemoEdit 的RepositoryItem 扩展对象,扩展函数如下所示的代码。
/// <summary> /// 创建GridView的列编辑为MemoEdit /// </summary> /// <param name="gridColumn">GridColumn列对象</param> /// <returns></returns> public static RepositoryItemMemoEdit CreateMemoEdit(this GridColumn gridColumn) { RepositoryItemMemoEdit repositoryItem = new RepositoryItemMemoEdit { AutoHeight = false, LinesCount = 0 }; gridColumn.View.GridControl.RepositoryItems.Add(repositoryItem); gridColumn.ColumnEdit = repositoryItem; return repositoryItem; }
我们把它们(这些扩展函数)定义在不同的类文件中,使用静态类就可以了。例如对于GridControl和GridView的相关处理扩展函数,把它整理放在一个类文件中,定义各种方便使用的方法即可,如下所示。
对于一些简单的录入我们保留让他使用默认文本输入框即可,如下所示代码。
this.gridViewRequisition.CreateColumn("需求金额", "需求金额", 80); this.gridViewRequisition.CreateColumn("采购数量", "采购数量", 80); this.gridViewRequisition.CreateColumn("采购金额", "采购金额", 80); this.gridViewRequisition.CreateColumn("库存数量", "库存数量", 80); this.gridViewRequisition.CreateColumn("可用库存", "可用库存", 80);
当然,如果我们想获得对应列的一些特殊的处理,那么可以把获得的列对象,赋值给变量,然后进行相关的属性处理。
var colQuantity = grv.CreateColumn("Quantity", "销售数量"); colQuantity.AppearanceCell.BackColor = Color.Moccasin; colQuantity.AppearanceCell.Options.UseBackColor = true; colQuantity.CreateSpinEdit();
而对于一些特殊的列,如一些下拉列表的列,我们可以指定他们的下拉列表,可以是固定列表,也可以通过函数获取数据库的记录进行绑定处理,如下所示。
var purchaseType = this.gridViewRequisition.CreateColumn("采购类型", "采购类型", 80).CreateGridLookUpEdit(); var typeList = new List<CListItem>() { new CListItem("正品"), new CListItem("样品"), new CListItem("免费") }; purchaseType.BindDictItems(typeList, false);
而如果备注处理,嫌GridView里面输入太麻烦,可以使用弹出的对话框进行处理,如下代码所示。
var note = this.gridViewRequisition.CreateColumn("备注", "备注", 100).CreateButtonEdit(); note.EditValueChanging += (ss, ee) => { gridViewRequisition.SetFocusedRowCellValue("备注", ee.NewValue); }; note.ButtonClick += (ss, ee) => { var dlg = new FrmShowTextEdit(); dlg.FieldDefaultValue = gridViewRequisition.GetFocusedRowCellDisplayText("备注"); dlg.FieldDisplayName = "备注"; if (dlg.ShowDialog() == DialogResult.OK) { gridViewRequisition.SetFocusedRowCellValue("备注", dlg.ReturnValue); } };
弹出界面如下所示。
或者有时候,我们使用一些其他的选择对话框,也是类似的处理方式。
gridview.Columns.ColumnByFieldName("Creator").CreateButtonEdit().ButtonClick += (object sender, ButtonPressedEventArgs e) => { FrmSelectCustomer dlg = new FrmSelectCustomer(); if(dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { if(gridview.GetFocusedRow() == null) { gridview.AddNewRow();//如果首次则增加一行 } gridview.SetFocusedRowCellValue("Creator", dlg.CustomerName); } };
如一些列表,也可以使用LookupEdit的编辑控件进行处理选择的展示。
如果我们希望对列表的特定字段进行启用编辑,那么可以利用下面扩展函数方式实现。
//设置只读、可编辑字段 this.gridViewAmount.SetColumnsReadOnly("*", false); this.gridViewAmount.SetColumnsReadOnly("序列,采购类型,需求量,备注", true);
如果需要指定特定的汇总字段,可以通过下面代码实现。
// 设置统计字段 if (gridViewAmount?.Columns.Count > 0) { gridViewAmount.ClearSummaryColumns(); gridViewAmount.SetSummaryColumn("采购数量", DevExpress.Data.SummaryItemType.Sum); }
在上面动态创建的列编辑控件,对于编辑的值发生变化,需要及时的反映到实际的列表对应的单元格的值中,一般在事件EditValueChanging 中通过SetFocusedRowCellValue 就可以设置回去了,如下代码所示。
var note = this.gridViewRequisition.CreateColumn("备注", "备注", 100).CreateButtonEdit(); note.EditValueChanging += (ss, ee) => { gridViewRequisition.SetFocusedRowCellValue("备注", ee.NewValue); };
而对于一些数值型的内容处理,如SpinEdit的编辑器控件,那么每次输入一个不同的字符都会触发这个处理,那么就有点不正常的了,因此可以通过下面的方式进行矫正,利用EditValueChanged事件的处理。
var xuqiuLiang = this.gridViewRequisition.CreateColumn("需求数量", "需求数量", 80).CreateSpinEdit(); xuqiuLiang.ValidateOnEnterKey = true; xuqiuLiang.EditValueChanged += async (ss, ee) => { var value = ((ss) as SpinEdit).Value; this.gridViewRequisition.SetFocusedRowCellValue("需求数量", value); //刷新显示 gridViewRequisition.RefreshRow(gridViewRequisition.FocusedRowHandle); };
上面的代码,通过把对应的当前控件转换为编辑器控件,获得值再行处理也是可以的。
另外,有时候,如果列的内容变更了,我们需要及时刷新指定列表行的内容,可以通过下面的代码实现的。
gridViewRequisition.RefreshRow(gridViewRequisition.FocusedRowHandle);
对于一些列表,需要给它指定删除的操作,方便移除整条记录,那么为它添加删除键即可,如下代码所示。
//行删除操作 this.gridViewRequisition.OptionsBehavior.AllowDeleteRows = DefaultBoolean.True; this.gridViewRequisition.KeyDown += (s, ee) => { if (ee.KeyCode == Keys.Delete) {//移除记录 gridViewRequisition.DeleteRow(gridViewRequisition.FocusedRowHandle); gridViewRequisition.RefreshData(); ee.Handled = true; } };
而对于列的一些格式转义操作,我们可以统一处理,可以把几个不同的GridView的转义函数放在一起。
//统一处理转义信息 this.gridViewRequisition.CustomColumnDisplayText += CustomColumnDisplayText; this.gridViewSubx.CustomColumnDisplayText += CustomColumnDisplayText; this.gridViewSpecification.CustomColumnDisplayText += CustomColumnDisplayText;
转义一般对日期的格式和数值型的格式进行一些格式化处理,如下代码所示。
private void CustomColumnDisplayText(object sender, CustomColumnDisplayTextEventArgs e) { string columnName = e.Column.FieldName; if (e.Column.ColumnType == typeof(DateTime) || e.Column.ColumnType == typeof(DateTime?)) { if (e.Value != null) { if (e.Value == DBNull.Value || Convert.ToDateTime(e.Value) <= Convert.ToDateTime("1900-1-1")) { e.DisplayText = ""; } else { e.DisplayText = Convert.ToDateTime(e.Value).ToString("yyyy-MM-dd HH:mm");//yyyy-MM-dd } } } else if (e.Column.ColumnType == typeof(decimal) || e.Column.ColumnType == typeof(decimal?)) { decimal value; if (decimal.TryParse(e.DisplayText, out value)) { e.DisplayText = value.ToString("0.################"); } } }
而如果喜欢对列的背景色等进行自定义,可以在事件RowCellStyle中,根据不同的字段名称进行处理。
this.gridViewSpecification.RowCellStyle += (s, e) => { e.Appearance.BackColor = Color.Transparent; if (e.Column.FieldName == "序列") { var xulie = string.Concat(gridViewSubx.GetFocusedRowCellValue("序列")); if (!xulie.IsNullOrEmpty() && e.CellValue?.ToString() == xulie) { e.Appearance.BackColor = Color.Red; //醒目颜色 } } };
有时候,我们需要反色当前选择的单元格,那么可以通过事件CustomDrawCell 进行控制,如下代码所示。
this.gridView1.CustomDrawCell += (s, e) => { // 设置选中单元格的背景颜色 if (e.Column == gridView1.FocusedColumn && e.RowHandle == gridView1.FocusedRowHandle) { e.Appearance.BackColor = Color.LightGreen; } };
以上就是一些利用GridView进行处理的一些经验代码总结,希望对您有所启发。
本文转载自:
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@cahobeh.cn
文章转载自:慧都网本文探讨 SQL Server 中 NULL 和空值之间的区别,并讨论如何有效地处理它们。
Unity 是一款功能极其丰富的游戏引擎,允许开发人员将各种媒体集成到他们的项目中。但是,它缺少最令人兴奋的功能之一 - 将 Web 内容(例如 HTML、CSS 和 JavaScript)直接渲染到 3D 场景中的纹理上的能力。在本文中,我们将介绍如何使用 DotNetBrowser 在 Unity3D 中将 Web 内容渲染为纹理。
DevExpress v24.2帮助文档正式发布上线了,请按版本按需下载~
本教程将向您展示如何用MyEclipse构建一个Web项目,欢迎下载最新版IDE体验!
行业领先的界面控件开发包,帮助企业构建卓越应用!
DevExpress DXperience Subscription高性价比的企业级.NET用户界面套包,助力企业创建卓越应用!
DevExpress WinForms Subscription为Windows Forms平台创建具有影响力的业务解决方案,高性价比WinForms界面控件套包。
DevExpress WPF Subscription高效MVVM开发模式,WPF界面解决方案首选工具,帮助企业实现酷炫动效界面。
DevExpress ASP.NET Controls多款重量级ASP.NET用户界面组件套包,让您快速开发出完美、强大的应用程序!
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@cahobeh.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢