DevExpress 之 GridControl 自定义列

摘要:
前言DevExpress控件应该为所有人所知。使用这个框架来实现B/S或C/S是非常好的。2) 为GridView的CustomUnboundColumnData事件中的列赋值。3) 注意:DevDxpress11.1.8版本不支持CustomUnboundColumnData事件,但DevDxpress 12.2版本支持该事件。因此,只能在支持CustomUnoundColumnData事件的版本中使用此方法。

Ø  前言

DevExpress 控件大家应该都有所了解,使用这个框架实现B/SC/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 事件,代码如下:

privatevoid 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;

        }

    }

}

 

效果如图:

clip_image002[5]

 

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

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

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

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

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

using DevExpress.XtraGrid.Views.Base;

using DevExpress.XtraGrid.Columns;

privatevoid 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);

}

 

privatevoid gridView1_CustomUnboundColumnData(object sender, CustomColumnDataEventArgs e)

{

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

        e.Value = getTotalValue(e.ListSourceRowIndex);

}

 

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

Ø  思路:

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

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

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

免责声明:文章转载自《DevExpress 之 GridControl 自定义列》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇VB可变数组定义网络文件下载(提供多种下载方式)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

DevExpress学习01——下载与安装

记得刚接触编程时,虽然实现了功能,但用户界面十分丑陋,老师叫我们美化一下界面,不要千篇一律,当时觉得能够写出来功能就洋洋得意了,不觉得界面丑陋。后来,在程序比赛中,我接触了一种第三方控件,它可以快速实现控件、皮肤的美化,它就是以前常用的DotNetBar,其入门使用方法见:http://www.cnblogs.com/liweis/p/4195070.ht...

Devexpress之LayoutControl的使用及其控件布局设计

引言 Devexpress给我们提供了更加美观、更加丰富控件,但在学习和使用的同时经常会遇到诸多麻烦。今天在使用Devexpress的LayoutControl控件进行界面控件的布局设计时遇到了如下的麻烦: 1.添加控件后,不知道如何修改控件的尺寸 2.由1引起的不知道如何讲两个控件放在同一行 经过摸索解决了以上问题。首先看我的需求是通过LayoutCon...

Winform中实现更改DevExpress的RadioGroup的选项时更改其他控件(TextEdit、ColorPickEdit)的值

场景 Winform中实现读取xml配置文件并动态配置ZedGraph的RadioGroup的选项: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100540708 在上面实现了将RadioGroup的选项根据配置文件动态配置后, 比如这里有三个选项,在更改选项时会对其他的控件的值进行...

DevExpress源码编译总结

独家提供完整可编译sln文件,本篇文章内容包括基础知识(GAC、程序集强签名、友元程序集)、编译过程、注册GAC、添加工具箱、多语言支持、运行时和设计时调试 源码地址链接:http://pan.baidu.com/s/1miNCHug密码:rlyr关于编译源码,前前后后折腾了太久,自己折腾,到官网折腾,到DXPER折腾,今天,总算有个结局了 编译环...

DevExpress ASP.NET ASPxGridView使用方法大全

dev的控件是比较好的开发的控件,写一些dev的学习笔记,共以后参考。 1、 绑定IList ASPxGridView1.KeyFieldName = "ID";//指定主键。直接更新数据和子表绑定需要用到 ASPxGridView1.DataSource = list;//指定Grid的数据 ASPxGridView1.DataBind(); //执行绑...

DevExpress 常用控件使用整理

一、LookUpEdit 单选下拉框 /// <summary> /// 定义一个数据源 /// </summary> public static List<dynamic> IsYes { get { return new List<dynamic>() {...