Devexpress使用之:GridControl控件

Devexpress系列控件功能很强大,使用起来也不太容易,我也是边摸索边使用,如果有时间我会把常用控件的使用方法整理出来的。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;
using DevExpress.XtraGrid.Columns;
using DevExpress.XtraGrid.Views.Base;
using DevExpress.XtraGrid.Views.BandedGrid;
using DevExpress.XtraEditors.Repository;

namespace XtraGridDemo1
{
    public partial class Form1 : DevExpress.XtraEditors.XtraForm
    {
        public Form1()
        {
            InitializeComponent();

            //首先拖到窗体上一个GridControl,在表格上点击“Click here to change view”链接,在弹出菜单中选择“convert to”-->“AdvBandedGridView”。

            InitGrid();
        }

        ///初始化表格
        private void InitGrid()
        {

            // advBandedGridView1是表格上的默认视图,注意这里声明的是:BandedGridView
            BandedGridView view = advBandedGridView1 as BandedGridView;

            view.BeginUpdate(); //开始视图的编辑,防止触发其他事件
            view.BeginDataUpdate(); //开始数据的编辑

            view.Bands.Clear();

            //修改附加选项
            view.OptionsView.ShowColumnHeaders = false;                         //因为有Band列了,所以把ColumnHeader隐藏
            view.OptionsView.ShowGroupPanel = false;                            //如果没必要分组,就把它去掉
            view.OptionsView.EnableAppearanceEvenRow = false;                   //是否启用偶数行外观
            view.OptionsView.EnableAppearanceOddRow = true;                     //是否启用奇数行外观
            view.OptionsView.ShowFilterPanelMode = ShowFilterPanelMode.Never;   //是否显示过滤面板
            view.OptionsCustomization.AllowColumnMoving = false;                //是否允许移动列
            view.OptionsCustomization.AllowColumnResizing = false;              //是否允许调整列宽
            view.OptionsCustomization.AllowGroup = false;                       //是否允许分组
            view.OptionsCustomization.AllowFilter = false;                      //是否允许过滤
            view.OptionsCustomization.AllowSort = true;                         //是否允许排序
            view.OptionsSelection.EnableAppearanceFocusedCell = true;           //???
            view.OptionsBehavior.Editable = true;                               //是否允许用户编辑单元格

            //添加列标题
            GridBand bandID = view.Bands.AddBand("ID");
            bandID.Visible = false; //隐藏ID列
            GridBand bandName = view.Bands.AddBand("姓名");
            GridBand bandSex = view.Bands.AddBand("性别");
            GridBand bandBirth = view.Bands.AddBand("出生日期");
            GridBand bandScore = view.Bands.AddBand("分数");
            GridBand bandMath = bandScore.Children.AddBand("数学");
            GridBand bandChinese = bandScore.Children.AddBand("语文");
            GridBand bandEnglish = bandScore.Children.AddBand("英语");
            GridBand bandSubTotal = bandScore.Children.AddBand("小计");
            GridBand bandRemark = view.Bands.AddBand("备注");

            //列标题对齐方式
            bandName.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
            bandSex.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
            bandBirth.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
            bandScore.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
            bandMath.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
            bandChinese.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
            bandEnglish.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
            bandSubTotal.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
            bandRemark.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;

            //模拟几个数据
            List<Record> listDataSource = new List<Record>();
            listDataSource.Add(new Record(1, "张三","男",Convert.ToDateTime("1989-5-6") ,115.5f,101,96,""));
            listDataSource.Add(new Record(2, "李四", "女", Convert.ToDateTime("1987-12-23"), 92, 85, 87, ""));
            listDataSource.Add(new Record(3, "王五", "女", Convert.ToDateTime("1990-2-11"), 88, 69, 41.5f, ""));
            listDataSource.Add(new Record(4, "赵六", "男", Convert.ToDateTime("1988-9-1"), 119, 108, 110, "备注行"));
            //绑定数据源并显示
            gridControl1.DataSource = listDataSource;
            gridControl1.MainView.PopulateColumns();

            //[小计]这一列因为没绑定数据源,所以需要手动添加
            //(有点复杂,慢慢看吧)
            string[] fieldNames = new string[] { "SubTotal" };
            GridColumn column;   //声明单列
            column = view.Columns.AddField(fieldNames[0]);  //添加一个数据字段
            column.VisibleIndex = view.Columns.Count -1;  //设置该列在编辑视图时的显示位置(倒数第二列)
            column.UnboundType = DevExpress.Data.UnboundColumnType.Decimal;
            column.OptionsColumn.AllowEdit = false;     //此列不可编辑
            column.Visible = true;
            view.Columns.Add(column);   //视图中添加一列

            //绑定事件,当[分数]改变时[小计]也跟着变
            //(好像只有在绑定事件里才能改变该单元格数值,直接修改无效)
            view.CustomUnboundColumnData += new
                DevExpress.XtraGrid.Views.Base.CustomColumnDataEventHandler(advBandedGridView1_CustomUnboundColumnData);

            //[性别]列绑定ComboBox
            RepositoryItemComboBox riCombo = new RepositoryItemComboBox();
            riCombo.Items.AddRange(new string[] {"男", "女"});
            gridControl1.RepositoryItems.Add(riCombo);
            view.Columns["Sex"].ColumnEdit = riCombo;

            //[出生年月]列绑定Date
            RepositoryItemDateEdit riDate = new RepositoryItemDateEdit();
            gridControl1.RepositoryItems.Add(riDate);
            view.Columns["Birth"].ColumnEdit = riDate;

            //[分数]列绑定SpinEdit
            RepositoryItemSpinEdit riSpin = new RepositoryItemSpinEdit();
            gridControl1.RepositoryItems.Add(riSpin);
            view.Columns["Math"].ColumnEdit = riSpin;
            view.Columns["Chinese"].ColumnEdit = riSpin;
            view.Columns["English"].ColumnEdit = riSpin;

            //[备注]列绑定MemoExEdit
            RepositoryItemMemoExEdit riMemoEx = new RepositoryItemMemoExEdit();
            gridControl1.RepositoryItems.Add(riMemoEx);
            view.Columns["Remark"].ColumnEdit = riMemoEx;

            //小计列添加汇总
            view.OptionsView.ShowFooter = true;     //显示表格页脚
            view.Columns["SubTotal"].SummaryItem.FieldName = "SubTotal";
            view.Columns["SubTotal"].SummaryItem.DisplayFormat = "{0:f2}";
            view.Columns["SubTotal"].SummaryItem.SummaryType = DevExpress.Data.SummaryItemType.Average;

            //将标题列和数据列对应
            view.Columns["ID"].OwnerBand = bandID;
            view.Columns["Name"].OwnerBand = bandName;
            view.Columns["Sex"].OwnerBand = bandSex;
            view.Columns["Birth"].OwnerBand = bandBirth;
            view.Columns["Math"].OwnerBand = bandMath;
            view.Columns["Chinese"].OwnerBand = bandChinese;
            view.Columns["English"].OwnerBand = bandEnglish;
            view.Columns["SubTotal"].OwnerBand = bandSubTotal;
            view.Columns["Remark"].OwnerBand = bandRemark;

            view.EndDataUpdate();//结束数据的编辑
            view.EndUpdate();   //结束视图的编辑

        }

        // 计算小计
        private float calcSubTotal(float math, float chinese, float english)
        {
            return math + chinese + english;
        }

        private void advBandedGridView1_CustomUnboundColumnData(object sender, CustomColumnDataEventArgs e)
        {
            ColumnView colView = sender as ColumnView;
            if (e.Column.FieldName == "SubTotal" && e.IsGetData) e.Value = calcSubTotal(
                     Convert.ToSingle(colView.GetRowCellValue(e.RowHandle, colView.Columns["Math"])),
                     Convert.ToSingle(colView.GetRowCellValue(e.RowHandle, colView.Columns["Chinese"])),
                     Convert.ToSingle(colView.GetRowCellValue(e.RowHandle, colView.Columns["English"])));
        }

        #region 运行时绑定到实现Ilist接口的数据源

        public class Record
        {
            int id;
            DateTime birth;
            string name, sex, remark;
            float math, chinese, english;
            public Record(int id, string name, string sex, DateTime birth, float math, float chinese, float english, string remark)
            {
                this.id = id;
                this.name = name;
                this.sex = sex;
                this.birth = birth;
                this.math = math;
                this.chinese = chinese;
                this.english = english;
                this.remark = remark;
            }
            public int ID { get { return id; } }
            public string Name
            {
                get { return name; }
                set { name = value; }
            }
            public string Sex
            {
                get { return sex; }
                set { sex = value; }
            }
            public DateTime Birth
            {
                get { return birth; }
                set { birth = value; }
            }
            public float Math
            {
                get { return math; }
                set { math = value; }
            }
            public float Chinese
            {
                get { return chinese; }
                set { chinese = value; }
            }
            public float English
            {
                get { return english; }
                set { english = value; }
            }
            public string Remark
            {
                get { return remark; }
                set { remark = value; }
            }

        }

        #endregion

    }
}

  

原文链接

http://www.cnblogs.com/habin/archive/2009/04/24/1442613.html

原文地址:https://www.cnblogs.com/IceNewMan/p/9900264.html

时间: 2024-10-08 23:41:59

Devexpress使用之:GridControl控件的相关文章

DevExpress中的GridControl控件设置了列Readonly后,想双击弹出明细的实现

OptionsBehavior.Editable = true时,会有二个对象触发事件:view触发ShownEditor 事件(第一单击时)和内置编辑器的DoubleClick事件所以必须处理这二个事件: private void gridView1_ShownEditor(object sender, System.EventArgs e){    DevExpress.XtraGrid.Views.Grid.GridView view = sender as DevExpress.Xtra

DevExpress的GridControl控件更新數據問題解決辦法

開發WPF程序時,使用Devexpress的GridControl控件用ItemSource綁定數據,在頁面進行編輯時,當屬性繼承INotifyPropertyChanged接口時會同步更新後臺數據.今天在開發時遇到一種情況,當通過GridControl中Row上Button[Command]改變行內數據,也就是binding的Detail數據已改變,這時NotifyPropertyChanged有觸發,但改變的行數據不會同步更新到UI上,目前測試有兩種方式進行解決. 1.直接new 一個新的行

DevExpress控件的GridControl控件小结

XtraGrid 的关键类就是:GridControl和GridView.GridControl本身不显示数据,数据都是显示在GridView/CardView /XXXXView中.GridControl是各种View的容器.所以要控制显示,要从GridView这些类入手. 1.DevExpress控件组中的GridControl控件不能使横向滚动条有效.现象:控件中的好多列都挤在一起,列宽都变的很小,根本无法正常浏览控件单元格中的内容. 解决: gridView1.OptionsView.C

设置DevExpress GridControl控件时间列显示时、分、秒样式

如题,如果Dev GridControl控件绑定DataTable数据源时,DataTable中的某一列为Date类型时,GridControl默认显示样式只显示当前日期,并不会将时.分.秒显示出来.如图: 解决方案: 设置显示样式,如图: 设置完成,显示结果展示,如图:

使用Devexpress中的CharControl控件,需要控制AxisY轴的显示范围,需要使用该控件的BoundDataChanged事件

一.控制ChartControl的Y轴范围 使用Devexpress中的CharControl控件,需要控制AxisY轴的显示范围,需要使用该控件的BoundDataChanged事件,具体代码如下: 该代码实现的效果如下: 参考文献: [1]AxisY Range Auto https://www.devexpress.com/Support/Center/Question/Details/Q266328 二.设置GridControl表格中的超级链接: 1.首先在表格的设计器中添加一个Hyp

Dev的GridControl控件选择框的使用

先介绍环境:VS2010,dev11.2 想要达到的效果:,当单击某一行时前面的选择框选中. 在网上找了不少,但是感觉跟我想的做法很不一样(有很多都是再另外添加一个什么CheckBox,这个我在Dev里是没有找到) 下面介绍我的做法: 首先:GridControl控件要设置为不可编辑状态,在“OptionsBehavior”下将“Editable”的值改为false,否则左键单击不管用. 第一步: 进入“Run Designer”添加三列,主要讲述一下第一列“判断列”的属性设置,这用了Dev的自

GridControl控件的数据显示的样式控制

如上两图所示,Dev列表控件GridControl默认的格式并没有渐变变色效果,显示的日期数据,也是“yyyy-MM-dd”的格式,而非“yyyy-MM-dd HH:mm:ss”即使对于后面有长格式的日期数据也一样.下面分别对这两种情况进行说明. 如上两图所示,我们有时候需要控制列表访问过的颜色变化,或者是时间显示格式等内容,这个时候设置GridView的RowCellStyle即可实现,如下所示. this.gridView1.RowCellStyle += new DevExpress.Xt

DevExpress XtraReports 入门六 控件以程序方式创建一个 交叉表 报表

原文:DevExpress XtraReports 入门六 控件以程序方式创建一个 交叉表 报表 本文只是为了帮助初次接触或是需要DevExpress XtraReports报表的人群使用的,为了帮助更多的人不会像我这样浪费时间才写的这篇文章,高手不想的看请路过 本文内容来DevExpress XtraReports帮助文档,如看过类似的请略过. 废话少说 开始正事 在继续本示例之前,要把所有 必需的程序集 添加到项目的 引用 列表中,并且把一个按钮拖放到窗体上. 然后,以下列方式接管此按钮的

在DevExpress中使用CameraControl控件进行摄像头图像采集

在我们以前的项目了,做摄像头的图片采集,我们一般还是需要做一个封装处理的,在较新版本的DevExpress控件里面,增加了一个CameraControl控件,可以直接调用摄像头显示的,因此也可以做头像采集等功能,本文介绍如何基于这个控件做相关的图像采集操作. 1.CameraControl控件介绍 该控件从15.1开始,就开始加入控件组了,控件的使用很简单,直接拖动到界面就可以在Winform界面上使用了.本案例基于16.1进行开发的,因此也都具有这些控件模块的. 例如我们直接把CameraCo

在DevExpress中使用WizardControl控件构建多步向导界面

利用好的界面控件,往往能做成比较界面体验效果.在一些界面操作里面,我们可能把它拆分为几部进行处理,这个时候引入WizardControl向导控件应该是比较不错的选择了.多步的处理方式,可以让用户避免一次性输入太多内容的烦躁心情,也可以针对性的校验部分内容,本文以利用WizardControl控件来设计找回密码的结果来进行介绍,使大家对基于DevExpress的WizardControl向导控件的使用有一个大概的了解. 1.界面效果的规划 在一般APP或者基于网络的软件界面里面,都有一个为了帮助用