Ø  前言

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

1.   方法一

使用 DevExpress.XtraGrid.Columns.GridColumn 的 UnboundExpression 。

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 :假设 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 等事件中为小计字段赋值即可。

DevExpress 之 GridControl 自定义列的更多相关文章

  1. DevExpress中GridControl自定义汇总列值(有选择性的汇总)

    今天碰到有同事遇到这个方面的需求,贴一下吧. private void gvTop_CustomSummaryCalculate(object sender, CustomSummaryEventAr ...

  2. 实现在DevExpress.XtraGrid.GridControl的列头绘制复选框以实现全选的功能

    首先新建一个Win Form测试项目,拖一个GridControl控件到窗体上. public partial class Form1 : Form { public Form1() { Initia ...

  3. devexpress表格gridcontrol实现列统计,总计,平均,求和等。

    1.在许多项目中,经常要实现对某些列的统计.devexpress控件gridcontrol实现这些功能只需要设置某些属性,就可以达到要求了.以下例举了一个统计班级总数,人数总计,分数总计的案例.效果图 ...

  4. DevExpress.XtraGrid.GridControl 实现自定义tooltip

    DevExpress.XtraGrid.GridControl 控件默认的tooltip显示的每一个单元格的文本值,但是实际工作中会出现各种需求.我这里就有一个列是折扣率显示的值是0-1之间的两位小数 ...

  5. DevExpress ASP.NET 使用经验谈(8)-ASPxGridView自定义列和基本事件

    为演示本节示例,我们在原来Users表增加[性别Gender].[兴趣爱好Hobbies],[CreateTime创建时间],[ModifyTime]修改时间这4个字段, ALTER TABLE [d ...

  6. DevExpress中GridControl列转义的实现方法

    /// <summary> /// CustomColumnDisplayText Helper /// </summary> /// <param name=" ...

  7. Devexpress 之gridControl

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

  8. DevExpress之GridControl控件小知识

    DevExpress之GridControl控件小知识 一.当代码中的DataTable中有建数据关系时,DevExpress 的 GridControl 会自动增加一个子视图 .列名也就是子表的字段 ...

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

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

随机推荐

  1. C#解决方案生成工具(2)

    环境  VS2017 社区版 W10 Project类 : 在Microsoft.Build.Evaluation命名空间下,可使用Project类分析项目的.csproj文件 // 实例化对象,参数 ...

  2. 20165223 2017-2018-2《Java程序设计》课程总结

    目录 每周作业链接汇总 实验报告链接汇总 自我剖析总结感悟 代码托管截图与链接 课堂项目实践 课后项目实践 课程收获与不足 学习建议 问卷调查 二维码链接 每周作业链接汇总 预备作业1:我期望的师生关 ...

  3. 普及一个Linux的小技能~Ctrl+Z切换到后台运行

    逆天Linux一直是自己摸索的,几年下来也小有心得,前不久PC也换成Ubuntu了,但毕竟不是专门搞运维的,有些知识还是有死角 这不,今天发现了个小技巧,来和大家分享一下: 比如运行一个交互式的程序: ...

  4. agc031

    T1 题意:给你一个串,求所有子序列个数,满足没有相同字符.1e5,2s. 解:考虑一个合法的子序列.其中每个字母的出现位置都有(出现次数)种选择.还可以不选,要 + 1. 然后乘起来就做完了.如果变 ...

  5. A1119. Pre- and Post-order Traversals

    Suppose that all the keys in a binary tree are distinct positive integers. A unique binary tree can ...

  6. 斯坦福大学公开课机器学习:machine learning system design | trading off precision and recall(F score公式的提出:学习算法中如何平衡(取舍)查准率和召回率的数值)

    一般来说,召回率和查准率的关系如下:1.如果需要很高的置信度的话,查准率会很高,相应的召回率很低:2.如果需要避免假阴性的话,召回率会很高,查准率会很低.下图右边显示的是召回率和查准率在一个学习算法中 ...

  7. firfox中"content-disposition", "attachment;filename=“+filename不能显示文件名字

    一般要在浏览器中显示文件名,可以使用以下文件名 // 设置文件名的编码方式,使得文件的名字能够正常安全的显示. filename = URLEncoder.encode(filename, " ...

  8. Windows下MySQL下载安装、配置与使用

    用过MySQL之后,不论容量的话,发现比其他两个(sql server .oracle)好用的多,一下子就喜欢上了.下面给那些还不知道怎么弄的童鞋们写下具体的方法步骤. (我这个写得有点太详细了,甚至 ...

  9. (贪心 区间) 51nod1091 线段的重叠

    X轴上有N条线段,每条线段包括1个起点和终点.线段的重叠是这样来算的,[10 20]和[12 25]的重叠部分为[12 20]. 给出N条线段的起点和终点,从中选出2条线段,这两条线段的重叠部分是最长 ...

  10. Calendar 类 案例 和 闰年的计算

    Calendar 类 是一个抽象类 getInstance()直接返回子类对象 直接调用 主要方法:get set add 代码如下: package cn.lijun.demo; import ja ...