写在前面的话:

  在园子里逛了有一段时间了,一直想写点东西,但苦于自己的水平有限,生怕写出来的东西浪费了读者的时间。楼主有幸参加了公司DevExpress控件的培训,独乐乐不如众乐乐,特附上Demo以飨读者!

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using DevExpress.XtraEditors;

using DevExpress.XtraGrid.Columns;

using DevExpress.XtraGrid.Views.Base;

using DevExpress.XtraGrid.Views.BandedGrid;

using DevExpress.XtraEditors.Repository;

namespace XtraGridDemo1

{

public partial class XtraForm1 : DevExpress.XtraEditors.XtraForm

{

public XtraForm1()

{

InitializeComponent();

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

InitGrid();

}

private void XtraForm1_Load(object sender, EventArgs e)

{

}

///初始化表格

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 = false;                             //是否允许用户编辑单元格

//添加列标题

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

}

}

DevExpress控件-- Gridcontrol合并表头的更多相关文章

  1. DevExpress控件GridControl中的布局详解 【转】

    DevExpress控件GridControl中的布局详解 [转] 2012-10-24 13:27:28|  分类: devexpress |  标签:devexpress  |举报|字号 订阅   ...

  2. DevExpress控件-GridControl根据条件改变单元格(Dev GridControl 单元格着色)

    DevExpress控件-GridControl根据条件改变单元格颜色,如下图: 解决办法:可以参考:http://www.cnblogs.com/zeroone/p/4311191.html 第一步 ...

  3. DevExpress控件-GridControl根据条件改变单元格/行颜色--转载

    DevExpress控件-数据控件GridControl,有时我们需要根据特定条件改变符合条件的行或者单元格颜色达到突出显示目的,现在动起鼠标跟我一起操作吧,对的,要达到这个目的您甚至都不用动键盘. ...

  4. DevExpress控件-GridControl根据条件改变单元格/行颜色(Dev GridControl 单元格着色) z

    DevExpress控件-数据控件GridControl,有时我们需要根据特定条件改变符合条件的行或者单元格颜色达到突出显示目的,现在动起鼠标跟我一起操作吧,对的,要达到这个目的您甚至都不用动键盘. ...

  5. 【转】Devexpress使用之:GridControl控件(合并表头)

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

  6. DevExpress 控件 GridControl常见用法

    刚接触DevExpress第三方控件,把GridControl的常见用法整理一下,以供参考: 说明: gcTest   GridControl gvText    GridView //隐藏最上面的G ...

  7. DevExpress控件GridControl使用 z

    设置选中行的背景色.而不改变前景色. EnableAppearanceFocusedCell = False, EnableAppearanceFocusedRow = False private v ...

  8. DevExpress控件 GridControl 单元格编辑 回车

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  9. devexpress表格控件gridcontrol实现纵向标头

    1.devexpress控件gridcontrol中的标头默认是横向的,如果要实现纵向标头应该怎么做呢.通过官网的资料整理了一个简单的案例,给大家分享一下.运行效果图如下: 2.数据绑定代码如下: D ...

随机推荐

  1. Linux Shell多进程并发以及并发数控制

    1. 基础知识准备 1.1. linux后台进程 Unix是一个多任务系统,允许多用户同时运行多个程序.shell的元字符&提供了在后台运行不需要键盘输入的程序的方法.输入命令后,其后紧跟&a ...

  2. Asp.net 管道事件

    在处理该请求时将由 HttpApplication 类执行以下事件. 希望扩展 HttpApplication 类的开发人员尤其需要注意这些事件. 1. 对请求进行验证,将检查浏览器发送的信息,并确定 ...

  3. IOS获取物理尺寸中7Plus中获取的是7的物理尺寸

    IOS获取物理尺寸中7Plus中获取的是7的物理尺寸: 在开发调试过程中我的7Plus手机获取[uiscreen mainscreen].bounds为750  .1334. 解决方案:在手机中的显示 ...

  4. get-random生成电话号码

    "138"+((0..9|Get-Random -count 10) -join $null) From:http://blog.csdn.net/shrekz/article/d ...

  5. UVa465 - Overflow

    题目地址:点击打开链接 C++代码: #include <cstdlib> #include <cstdio> int main() { char s1[10000],s2[1 ...

  6. Geogebra里给带有曲线和直线混合边界的封闭区域填充颜色

    目的 用Geogebra绘制如图所看到的曲线,并填充如图边界的区域为实心: 用代码实现当然是能够的,可是,图形过于简单的时候用代码就不经济了.由于每个细小变动都还要调整改动代码并预览,非所见即所得.往 ...

  7. Android开发之Bitmap二次采样

    Bitmap二次采样,听着好像是一个高大上的事,其实也就那么回事,今天我们就来看看Bitmap的二次采样问题. 1.为什么要二次采样 OK,那么首先我要 解决的一个问题就是为什么我们要二次采样? 不知 ...

  8. 使用DrawerLayout实现QQ5.0侧拉菜单效果

    在上一篇文章中,我们介绍了怎么使用DrawerLayout来实现一个简单的侧拉菜单(使用DrawerLayout实现侧拉菜单),也就是我们常说的抽屉效果,GitHub上类似效果的实现方式非常多,实现出 ...

  9. Java动态绑定

    1. 动态绑定 将一个方法调用同一个方法主体关联起来被称作绑定. 在运行时根据对象的类型进行绑定,叫做后期绑定或运行时绑定.Java中除了static方法和final 例如,下面定义了一个Shape类 ...

  10. java与.net平台之间进行RSA加密验证

    RSA加密算法虽然不分平台,标准都是一样的,但是各个平台的实现方式都不尽相同,下面来我来说说java与.net平台之间该如何进行RSA加密验证,即java端加密->.net端验证和.net端加密 ...