Ø  前言

DevExpress 控件大家应该都有所了解,使用这个框架实现B/S或C/S的,都是非常出色的。本文主要讨论下 GridControl 中如何【自定义列】或【计算列】,可使用以下两种方法实现:

1.   方法一

使用 DevExpress.XtraGrid.Columns.GridColumn 的 UnboundExpression 与 UnboundType 属性,步骤如下:

1)   点击 GridControl 控件的 Run Designer 按钮。

2)   选择 Columns,增加一个隐藏列,用于绑定数据的列。

3)   再增加一个显示列(自定义列),用于显示自定义数据。

Ø  示例如下:

1)   显示性别(男、女),但数据库存储的是 1 或 0。

1.   设置 UnboundExpression 属性为:Iif([Sex] == 0 Or [Sex] == 1, Iif([Sex] == 1, '男', '女'), '未知')

2.   设置 UnboundType 属性为:String

2)   显示商品状态(可发、残疵、锁定、破损、临保、过期),但数据库存储的是 1 至 6。

1.   设置 UnboundExpression 属性为:Iif([ProductStateId] >= 1 And [ProductStateId] <= 6, Iif([ProductStateId] == 1, '可发', Iif([ProductStateId] == 2, '残疵', Iif([ProductStateId] == 3, '锁定', Iif([ProductStateId] == 4, '破损', Iif([ProductStateId] == 5, '临保', Iif([ProductStateId] == 6, '过期', '未知')))))), '无')

2.   设置 UnboundType 属性为:String

Ø  注意:

1.   绑定数据的列不能将自身设置为计算列,例如在 Sex 列设置:Iif([Sex] == 0 Or [Sex] == 1, Iif([Sex] == 1, '男', '女'), '未知'),将报错。

2.   自定义列的命名必须与数据绑定列不一致,例如:DisplaySex。

2.   方法二

使用 DevExpress.XtraGrid.Views.Grid.GridView 的 CustomColumnDisplayText 事件,代码如下:

private void gvMx_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e)

{

if (e.Column.FieldName == "Sex")

{

switch (Convert.ToString(e.Value))

{

case "1":

e.DisplayText = "男";

break;

case "0":

e.DisplayText = "女";

break;

default:

e.DisplayText = "未知";

break;

}

}

}

效果如图:

3.   利用 GridView 的 CustomUnboundColumnData 事件添加非绑定列

1)   首先在 GridView 中添加一列,并设置相关属性。

2)   在 GridView 的 CustomUnboundColumnData 事件中,对该列赋值。

3)   注意:在 DevDxpress11.1.8 的版本中不支持 CustomUnboundColumnData 事件,在 DevDxpress12.2 的版本中已支持,所以该方法只能适用于支持 CustomUnboundColumnData 事件的版本中。

4)   示例1:假设 gridView1 已经绑定[Order Details]表中的 Quantity、UnitPrice 和 Discount字段,下面再为 gridView1 添加一个非绑定列"TotalMoney",用于显示订单明细每一项的总金额,计算公式:Quantity * UnitPrice * (1 - Discount),代码如下:

using DevExpress.XtraGrid.Views.Base;

using DevExpress.XtraGrid.Columns;

private void Form1_Load(object sender, System.EventArgs e)

{

gridControl1.ForceInitialize();

GridColumn unbColumn = gridView1.Columns.AddField("TotalMoney");

unbColumn.VisibleIndex = gridView1.Columns.Count;

unbColumn.UnboundType = DevExpress.Data.UnboundColumnType.Decimal;

unbColumn.OptionsColumn.AllowEdit = false;

unbColumn.DisplayFormat.FormatType = DevExpress.Utils.FormatType.Numeric;

unbColumn.DisplayFormat.FormatString = "c";

unbColumn.AppearanceCell.BackColor = Color.LemonChiffon;

}

decimal getTotalValue(int index)

{

DataRow row = dataSet.Tables["Order Details"].Rows[index];

decimal unitPrice = Convert.ToDecimal(row["UnitPrice"]);

decimal quantity = Convert.ToDecimal(row["Quantity"]);

decimal discount = Convert.ToDecimal(row["Discount"]);

return unitPrice * quantity * (1 - discount);

}

private void gridView1_CustomUnboundColumnData(object sender, CustomColumnDataEventArgs e)

{

if (e.Column.FieldName == "TotalMoney" && e.IsGetData)

e.Value = getTotalValue(e.ListSourceRowIndex);

}

4.   使用数据源的部分类,添加绑定列(字段)

Ø  思路:

1)   通常我们绑定 GridView 会使用 DataTable、List<Class>、System.Windows.Forms.BindingSource 等等。后面两者其实都是一个类对象的集合,而这个类则对应数据库中的一张表,或者一个视图,总之就是一个类(class)。

2)   既然是一个类,我们就可以对这个类进行扩展(添加额外的字段)。

3)   例如:我们有一个表格(GridView),其中有商品数量、价格列,而我们还需要一个【小计】列(计算列),这时我们就可以在数据源类扩展一个字段,用于展示小计。再将该字段绑定到 GridView 中,就实现了扩展字段添加绑定列的需求。最后就是实现计算,在 GridView.CellValueChanged 等事件中为小计字段赋值即可。

转载于:https://www.cnblogs.com/abeam/p/8072777.html

DevExpress 之 GridControl 自定义列相关推荐

  1. Devexpress 之gridControl

    1.gridControl如何去掉主面板? 鼠标右键Run Designer=>OptionsView => ShowGroupPanel=False: 2.gridControl如何设置 ...

  2. DevExpress.XtraGrid.GridControl中数据源的绑定问题

    在利用DevExpress.XtraGrid.GridControl作为一个可编辑的表格控件时,在利用控件之前,先将一个初始化的DataTable对象作为GridControl的数据源进行绑定.可是在 ...

  3. DevExpress的GridControl控件筛选行自动筛选模式

    DevExpress的GridControl控件筛选行过滤行自动筛选过滤模式修改为"包含"模式 方法: 设置列的过滤属性为"包含",属性值为枚举类型 forea ...

  4. WPF DevExpress grid 设置自定义筛选栏的条件为包含关系

    WPF DevExpress grid 设置自定义筛选栏的条件为包含关系 根据 DevExpress.Xpf.Grid改造 来源:CSDN  原文:https://blog.csdn.net/alis ...

  5. 为 ASP.NET Datagrid 创建自定义列

    Marcie Robillard DatagridGirl.com 2003 年 9 月 简介 不得不承认,为 Microsoft® ASP.NET 编写 Datagrid 代码包括大量的重复工作.尽 ...

  6. PowerBI随笔(3)-增加自定义列

    商品表加上价格 然后增加自定义列,统计金额 (1)合并查询,加上价格 (2)增加自定义列

  7. WeihanLi.Npoi 导出支持自定义列内容啦

    WeihanLi.Npoi 导出支持自定义列内容啦 Intro 之前也有网友给提出过希望列合并或者自定义列内容的 issue 或请求,起初因为自己做 WeihanLi.Npoi 这个扩展的最初目的是导 ...

  8. iview table 自定义列_基于VueJS的render渲染函数打造一款非常强大的IView 的Table组件...

    1.render渲染函数的介绍 字符串模板的代替方案,允许你发挥 JavaScript 最大的编程能力.该渲染函数接收一个 createElement 方法作为第一个参数用来创建 VNode. 如果组 ...

  9. elementUI表格组件:自定义列模板(完整案例)

    elementUI表格组件:自定义列模板(含效果图) 所谓的自定义列模板,你也可以理解为自定义td的格式. 官方文档地址 :查看地址 页面· 效果图 · 对比 : 代码块1 · 对比:<temp ...

最新文章

  1. 【Swift】 GETPOST请求 网络缓存的简单处理
  2. Android通过for循环批量发送短信
  3. 【opencv系列08】OpenCV4.X图像融合操作
  4. 个人永久性免费-Excel催化剂功能第28波-工作薄瘦身,安全地减少非必要冗余
  5. SAP Material type mapping
  6. 一人之力也能抬起一辆大型箱车?
  7. C++ 11 深度学习(三)范围for、new内存动态分配、nullptr
  8. 4.10/4.11/4.12 lvm讲解 4.13 磁盘故障小案例
  9. 【DevOps】从理念到实施
  10. uos安装方法_国产UOS(统一操作系统),虚拟机安装体验
  11. 脚本化HTTP 取得响应 指定请求
  12. 【干货】数字经济百项场景.pdf(附下载链接)
  13. 虹软人脸识别SDK - Java服务端的那些事
  14. python自动化--接口请求及封装
  15. SQL Server 和 HSQLDB 中使用 merge into 完成 saveOrUpdate
  16. 银行登录页面html代码,银行管理系统(带界面)
  17. 根据经纬度使用百度和高德地图 进行导航
  18. BTA16可控硅固态继电器电路开发的有关问题
  19. 数字时代,企业如何选择适合自己的转型平台?
  20. 蓄电池与超级电容混合储能并网matlab simulink仿真模型

热门文章

  1. excel表格不够怎么添加_做出来的Excel表格乱七八糟,不够清晰?学会思路就简单多了...
  2. 最大似然估计_机器学习最大似然估计
  3. mysql创建表的默认大小_mysql InnoDB建表时设定初始大小的方法
  4. Android Espresso
  5. 迅捷cad_迅捷属性
  6. ActionContext保存客户提交的参数,session会话等
  7. 高薪Java开发工程师需要掌握哪些技能?
  8. 什么是运营?与产品的关系是怎样的?
  9. https://docs.python.org/3/
  10. mysql性能测试工具之sysbench