Devexpress使用之:GridControl控件

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


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
 

    }
 }
 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值