【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

相关新闻

2026年遮光缠绕膜定做厂家该怎么选

2026年遮光缠绕膜定做厂家该怎么选

随着工业包装对产品防护与仓储管理要求的不断提升,遮光缠绕膜作为一种兼具拉伸包装与光敏防护功能的材料,正逐步成为冷链物流、电子元件、化工原料等领域的“刚需”产品。当时间节点来到2026年,采购方在选择定做厂家时,已不再单纯…

2026/9/10 10:36:03 阅读更多 →
[1214]基于Python实现视频去重

[1214]基于Python实现视频去重

文章目录videohash2🛠️ 安装🎬 基本用法🤝 比较视频:如何判断相似📚 进阶用法⚠️ 使用限制💡 与另一个分支的区别基于Python实现视频去重基本原理实现方法其它视频去重codevideohash2 https://github.com…

2026/9/5 23:12:29 阅读更多 →
终极免费跨平台智能下载器:3分钟上手获取视频号、抖音、快手等全网资源

终极免费跨平台智能下载器:3分钟上手获取视频号、抖音、快手等全网资源

终极免费跨平台智能下载器:3分钟上手获取视频号、抖音、快手等全网资源 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader…

2026/9/7 7:17:07 阅读更多 →

最新新闻

OpenClaw 跑本地智能体任务:Key 用 TaoToken

OpenClaw 跑本地智能体任务:Key 用 TaoToken

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

2026/9/14 21:52:17 阅读更多 →
AHC算法在点云平面识别中的高效应用与优化

AHC算法在点云平面识别中的高效应用与优化

1. 项目概述:AHC算法在点云平面识别中的应用价值在三维视觉领域,点云数据分割一直是核心挑战之一。去年参与某工业检测项目时,我们面对的是包含数千万个数据点的金属零件扫描数据,需要快速识别出其中的平面特征用于质量检测。传统…

2026/9/14 21:52:17 阅读更多 →
Spring Boot+Vue水质监测中台全栈实践

Spring Boot+Vue水质监测中台全栈实践

简介:本资源是武汉大学2025年大学生创新创业训练计划(大创)中水质检测可视化平台的完整Web开发源码,面向Java后端与Vue前端开发者、环境类项目实践者及高校创新团队,解决水质监测数据高效展示与交互呈现问题。压缩包共…

2026/9/14 21:52:17 阅读更多 →
Python代码格式化工具Black的核心优势与实践指南

Python代码格式化工具Black的核心优势与实践指南

1. 为什么Python开发者需要Black代码格式化工具在Python开发中,代码风格一致性往往成为团队协作的痛点。我经历过多个项目,发现约40%的代码审查时间都浪费在缩进、空格、换行等格式问题的争论上。Black的出现彻底改变了这种状况——它是一款"独裁式…

2026/9/14 21:52:17 阅读更多 →
基于 Rainbond 一键部署 Apache DolphinScheduler 高可用集群:从应用到源码的完整实践指南

基于 Rainbond 一键部署 Apache DolphinScheduler 高可用集群:从应用到源码的完整实践指南

基于 Rainbond 一键部署 Apache DolphinScheduler 高可用集群:从应用到源码的完整实践指南 【免费下载链接】dolphinscheduler Apache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code 项…

2026/9/14 21:52:17 阅读更多 →
永磁同步风力发电机Simulink建模与仿真实践

永磁同步风力发电机Simulink建模与仿真实践

1. 永磁同步风力发电机仿真模型概述永磁同步风力发电机(PMSG)因其高效率、高功率密度和免维护特性,已成为现代风力发电系统的主流选择。Simulink作为MATLAB中的动态系统仿真平台,为风力发电机建模与控制策略验证提供了理想环境。这个仿真模型的核心价值在…

2026/9/14 21:51:17 阅读更多 →

日新闻

AI音乐侵权案中的测试工程与版权保护技术

AI音乐侵权案中的测试工程与版权保护技术

1. 项目概述:当测试工程师遇上AI音乐侵权案去年夏天,我作为技术顾问参与了一起特殊的著作权纠纷案——某音乐平台AI作曲功能被指控批量侵权。这起案件的特殊性在于:原告方并非传统音乐人,而是一家拥有百万级曲库的数字音乐发行商&…

2026/9/14 0:00:26 阅读更多 →
嵌入式面试I2C与SPI深度解析:从协议到量产调试

嵌入式面试I2C与SPI深度解析:从协议到量产调试

1. 这份“高频知识点洞察”到底是什么,又为什么值得你花时间细读? 如果你最近在刷嵌入式开发岗位的招聘JD,或者正坐在工位上改第7版简历,又或者刚被面试官一句“讲讲I2C和SPI的区别”问得手心冒汗——那你不是一个人。过去两年我带…

2026/9/14 0:00:26 阅读更多 →
51单片机开环控制磁阻传感器的硬件匹配与代码实现

51单片机开环控制磁阻传感器的硬件匹配与代码实现

简介:本资源是一份面向嵌入式初学者与单片机课程实践者的51单片机开关磁阻电机(SRM)开环控制教学方案,聚焦磁阻位置检测、固定时序驱动与基础状态可视化。资源包含1个C语言主程序文件(zhuang600.c)实现电机…

2026/9/14 0:00:26 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/14 5:45:49 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/14 0:52:26 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/14 0:06:41 阅读更多 →

月新闻

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

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

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

2026/9/14 17:35:10 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

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

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

2026/9/14 16:59:29 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/14 5:45:14 阅读更多 →