【DevExpress中文教程】在GridView中动态创建列时如何绑定不同编辑处理控件

发布时间:2026/9/27 12:16:15

【DevExpress中文教程】在GridView中动态创建列时如何绑定不同编辑处理控件
在使用DevExpress GridView时为了方便往往使用一些扩展函数动态创建GridView列的编辑控件对象然后我们可以灵活的对内容进行编辑或者使用一些弹出的对话框窗体进行处理内容的录入本文就是介绍这一主题在DevExpress的GridView的列中动态创建列的时候绑定不同的编辑处理控件。DevExpress拥有.NET开发需要的所有平台控件包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。DevExpress新旧版本帮助文档下载可进QQ qun获取1697253161. 使用扩展函数动态创建列我们创建列为了绑定相应的数据源信息展示一般指定列的名称和显示的列标题名称如下是一个简单的列创建处理代码。grv.CreateColumn(Note, 备注说明);如果赢绑定了数据源我们也可以根据列的FieldName进行获得列的控制权然后给它指定不同的编辑控件如下所示。gridview.Columns.ColumnByFieldName(Introduction).CreateMemoEdit();上面的CreateMemoEdit()函数就是一个简单的扩展函数用于创建一个备注列的处理它的编辑器控件 RepositoryItemMemoEdit 的RepositoryItem 扩展对象扩展函数如下所示的代码。/// summary /// 创建GridView的列编辑为MemoEdit /// /summary /// param namegridColumnGridColumn列对象/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 ListCListItem() { 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); }2. 列内容的格式处理在上面动态创建的列编辑控件对于编辑的值发生变化需要及时的反映到实际的列表对应的单元格的值中一般在事件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进行处理的一些经验代码总结希望对您有所启发。本文转载自博客园 - 伍华聪https://www.cnblogs.com/wuhuacong/p/17566150.html

相关新闻

Kendo UI for jQuery,一个现代的jQuery UI组件!

Kendo UI for jQuery,一个现代的jQuery UI组件!

2026/9/24 20:17:31

Kendo UI for jQuery是什么?Kendo UI for jQuery是完整的jQuery UI组件库,可快速构建出色的高性能响应式Web应用程序。Kendo UI for jQuery提供在短时间内构建现代Web应用程序所需要的工具,从多个UI组件中选择,并轻松地将它们组合…

佳能g1800 g1810 g2800 g2810 g3800 g3810 g4800 g4810清零软件5b00,5b02,5b04,1700,1702,1704,p07,e08亲测完美维修。

佳能g1800 g1810 g2800 g2810 g3800 g3810 g4800 g4810清零软件5b00,5b02,5b04,1700,1702,1704,p07,e08亲测完美维修。

2026/8/29 21:41:29

极速下载:点这里下载 密码:00 百度云:点这里下载 备用:pan.baidu.com/s/1gls2G4rqWWP-Mw-z6tVjnQ?pwd0000 常见型号如下: G1000、G1100、G1200、G1400、G1500、G1800、G1900、G1010、G1110、G1120、G1410、G1420、G1411、G1…

使用MyEclipse如何部署Descriptor (XML)编辑器?

使用MyEclipse如何部署Descriptor (XML)编辑器?

2026/8/18 9:46:15

Descriptor (XML) Editor编辑器包含了高级的XML编辑功能,在本文中您将了解到这些编辑功能、Web XML编辑等,此功能包含在MyEclipse中可用。1. Web XML 编辑器MyEclipse Web XML编辑器包括高级XML编辑功能,如:语法高亮显示标签和属性…

CANN/GE ACL数据集缓冲区添加函数

CANN/GE ACL数据集缓冲区添加函数

2026/9/26 19:14:12

aclmdlAddDatasetBuffer 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

用ffmpeg高效批量调整图片尺寸的实战指南

用ffmpeg高效批量调整图片尺寸的实战指南

2026/9/27 1:30:29

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

2026/9/27 1:30:37

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and mu…

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

2026/9/27 1:30:35

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system sup…

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

2026/9/27 1:30:34

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

2026/9/26 16:36:51

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting mi…

远程协作的工作台整理

远程协作的工作台整理

2026/9/26 14:29:04

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/26 13:57:22

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/26 23:35:16

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…