DevExpress 之 GridControl 自定义列
Posted Abeam
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DevExpress 之 GridControl 自定义列相关的知识,希望对你有一定的参考价值。
Ø 前言
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;
Devexpress使用之:GridControl控件
DevExpress 的Gridcontrol 之gridview 使用困惑?