您的位置:首页 > 其它

Devexpress Gridcontrol 合并行,列头

2013-09-24 19:09 441 查看
一、合并列头



usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
usingDevExpress.XtraEditors;

usingDevExpress.XtraGrid.Columns;
usingDevExpress.XtraGrid.Views.Base;
usingDevExpress.XtraGrid.Views.BandedGrid;
usingDevExpress.XtraEditors.Repository;

namespaceXtraGridDemo1
{
publicpartialclassXtraForm1:DevExpress.XtraEditors.XtraForm
{
publicXtraForm1()
{
InitializeComponent();

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

InitGrid();
}

privatevoidXtraForm1_Load(objectsender,EventArgse)
{

}
///初始化表格
privatevoidInitGrid()
{

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

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

//添加列标题
GridBandbandID=view.Bands.AddBand("ID");
bandID.Visible=false;//隐藏ID列
GridBandbandName=view.Bands.AddBand("姓名");
GridBandbandSex=view.Bands.AddBand("性别");
GridBandbandBirth=view.Bands.AddBand("出生日期");
GridBandbandScore=view.Bands.AddBand("分数");
GridBandbandMath=bandScore.Children.AddBand("数学");
GridBandbandChinese=bandScore.Children.AddBand("语文");
GridBandbandEnglish=bandScore.Children.AddBand("英语");
GridBandbandSubTotal=bandScore.Children.AddBand("小计");
GridBandbandRemark=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=newList<Record>();
listDataSource.Add(newRecord(1,"张三","男",Convert.ToDateTime("1989-5-6"),115.5f,101,96,""));
listDataSource.Add(newRecord(2,"李四","女",Convert.ToDateTime("1987-12-23"),92,85,87,""));
listDataSource.Add(newRecord(3,"王五","女",Convert.ToDateTime("1990-2-11"),88,69,41.5f,""));
listDataSource.Add(newRecord(4,"赵六","男",Convert.ToDateTime("1988-9-1"),119,108,110,"备注行"));
//绑定数据源并显示
gridControl1.DataSource=listDataSource;
gridControl1.MainView.PopulateColumns();

//[小计]这一列因为没绑定数据源,所以需要手动添加
//(有点复杂,慢慢看吧)
string[]fieldNames=newstring[]{"SubTotal"};
GridColumncolumn;//声明单列
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
RepositoryItemComboBoxriCombo=newRepositoryItemComboBox();
riCombo.Items.AddRange(newstring[]{"男","女"});
gridControl1.RepositoryItems.Add(riCombo);
view.Columns["Sex"].ColumnEdit=riCombo;

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

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

//[备注]列绑定MemoExEdit
RepositoryItemMemoExEditriMemoEx=newRepositoryItemMemoExEdit();
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();//结束视图的编辑

}

//计算小计
privatefloatcalcSubTotal(floatmath,floatchinese,floatenglish)
{
returnmath+chinese+english;
}

privatevoidadvBandedGridView1_CustomUnboundColumnData(objectsender,CustomColumnDataEventArgse)
{
ColumnViewcolView=senderasColumnView;
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接口的数据源

publicclassRecord
{
intid;
DateTimebirth;
stringname,sex,remark;
floatmath,chinese,english;
publicRecord(intid,stringname,stringsex,DateTimebirth,floatmath,floatchinese,floatenglish,stringremark)
{
this.id=id;
this.name=name;
this.sex=sex;
this.birth=birth;
this.math=math;
this.chinese=chinese;
this.english=english;
this.remark=remark;
}
publicintID{get{returnid;}}
publicstringName
{
get{returnname;}
set{name=value;}
}
publicstringSex
{
get{returnsex;}
set{sex=value;}
}
publicDateTimeBirth
{
get{returnbirth;}
set{birth=value;}
}
publicfloatMath
{
get{returnmath;}
set{math=value;}
}
publicfloatChinese
{
get{returnchinese;}
set{chinese=value;}
}
publicfloatEnglish
{
get{returnenglish;}
set{english=value;}
}
publicstringRemark
{
get{returnremark;}
set{remark=value;}
}

}

#endregion

}
}


二、合并行:

gv1.OptionsView.AllowCellMerge=true;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: