zoukankan      html  css  js  c++  java
  • DevExpress 之 GridControl 自定义列

    Ø  前言

    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 事件,代码如下:

    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;

            }

        }

    }

     

    效果如图:

    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;

    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 会使用 DataTableList<Class>System.Windows.Forms.BindingSource 等等。后面两者其实都是一个类对象的集合,而这个类则对应数据库中的一张表,或者一个视图,总之就是一个类(class)。

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

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

  • 相关阅读:
    Http系列目录
    C# 锁系列目录
    RabbitMQ系列目录
    Zookeeper系列目录
    Spring Boot系列目录
    SOAP系列目录
    DynamicProxy系列目录
    网络通信系列目录
    分析windows .net程序dump文件的两种方式
    Code Review Checklist
  • 原文地址:https://www.cnblogs.com/abeam/p/8072777.html
Copyright © 2011-2022 走看看