Dev Express 之GridControl详解(图文并茂)
- 格式:docx
- 大小:6.03 MB
- 文档页数:77
Dev-Express-之GridControl详解(图文并茂)Dev Express GridControl详解(一)原汁原味的表格展示Dev控件中的表格控件GridControl控件非常强大。
不过,一些细枝末节的地方有时候用起来不好找挺讨厌的。
使用过程中,多半借助Demo和英文帮助文档。
网上具体的使用方法也多半零碎。
偶遇一个简单而且详细的使用文档。
好记性不如烂笔头!转载过来,整理整理发出来做个记录,总共有十个小节。
做的非常精细,非常感谢原作者。
插件所在位置使用时拖拽过来,如下所示即使拖拽过来原封不动的样子:在程序中写入构建一个表格的代码:[csharp] view plaincopyprint?1. private DataTable InitDt()2.{3.DataTable dt = new DataTable("个人简历");4.dt.Columns.Add("id",typeof(int));5.dt.Columns.Add("name", typeof(string));6.dt.Columns.Add("sex", typeof(int));7.dt.Columns.Add("address", typeof(string));8.dt.Columns.Add("aihao", typeof(string));9.dt.Columns.Add("photo", typeof(string));10.dt.Rows.Add(new object[] { 1, "张三", 1, "东大街6号", "看书", "" });11.dt.Rows.Add(new object[] { 1, "王五", 0, "西大街2号", "上网,游戏", "" });12.dt.Rows.Add(new object[] { 1, "李四", 1, "南大街3号", "上网,逛街", "" });13.dt.Rows.Add(new object[] { 1, "钱八", 0, "北大街5号", "上网,逛街,看书,游戏", "" });14.dt.Rows.Add(new object[] { 1, "赵九", 1, "中大街1号", "看书,逛街,游戏", "" });15.return dt;16.}17.<P> </P>书写gridControl1绑定数据方法:[csharp] view plaincopyprint?1. private void BindDataSource(DataTable dt)2.{3.//绑定DataTable4.gridControl1.DataSource = dt;5.//绑定DataSet6.//gridControl1.DataSource = ds;7.//gridControl1.DataMember = "表名";8.}程序调用:BindDataSource(InitDt());呈现结果如下:(二)表格的列名配置点击Run Designer控件上的按钮,弹出视图设计窗口:列配置:我们配置完列名后,会发现设计视图发生了变化:运行结果:(三)列数据的格式设置为了测试方便,我们加入新的3列,格式分别是数据,时间,字符串。
下面整理一下GridControl 常用的功能, GridControl 包含CardView 、GridVie w 、BandedGridView 、AdBandedGridView 、LayoutView 五个组件,最常用的非GridView 莫属。
DevExpress.XtraGrid.GridControl 和VS 自带的DataGridVi ew 非常类似,但使用上有很多的差异。
1、获取选中行的行号1 int rowIndex = this .gridView1.FocusedRowHandle ;2、获取选中行 的数据1 string colValue = this .gridView1.GetRowCellValue (this .gridView1.FocusedRowHandl e , this .gridView1.Columns [1]).ToString () ; 3、删除选中行数据1 2 3 int focusedRow = this .gridView1.FocusedRowHandle ;dt .Rows .RemoveAt (focusedRow ); this .gridControl1.DataSource = dt ;4、获取总行数1 int rownum = this .gridView1.RowCount ; 5、插入、删除、修改 数据(增删改)123456 7 8 9 10 11 121314//增加行 private void AddRows (stringrow_num ) { dt .Rows .Add (new object [] { row_num,"" }); this .gridControl1.DataSource = dt ; } //删除行 private void SubRows (introwindex ) { dt .Rows .RemoveAt (rowindex ); this .gridC ontrol1.DataSource = dt ; } //修改行 private voidModifyRows (int rowindex,int colindex,stringvalue ) { dt .Rows [rowindex ][colindex ] =value ; this .gridControl1.DataSource = dt ; }15161718 6、清空数据和表格 并添加两个列123 45//方法一:新建并绑定数据源 DataTable dt = new DataTable (); dt .Columns .Add ("ID"); dt .Columns .Add ("DATE"); this .gridControl1.DataSource = dt ; 123 4 56//方法二:循环删除每条数据 for (int index = 0;this .gridView1.RowCount -1;index ++) { dt .Rows .RemoveAt (rowindex ); this .gridControl1.Da taSource = dt ; }对gridView1中的操作基本都可以通过更改绑定的数据源来实现。
DevExpress之GridControl控件⼩知识DevExpress之GridControl控件⼩知识⼀.当代码中的DataTable中有建数据关系时,DevExpress 的 GridControl 会⾃动增加⼀个⼦视图 .列名也就是⼦表的字段名 ,按下⾯⽅法⾃定义⼦视图DevExpress控件,当Table建⽴关系后,⼦表显⽰的Grid设置,在不设置的情况下默认显⽰⼀个Grid,但列头的名字为数据源的列名需要更改列头的描述必须⾃定义⼀个Grid,步骤:1.[Clike here to create a new leve]点击此处创建⼀个Leve2.单建刚建出的Leve右边的[Click here to change view]选择⼀个View类型3.为GridControl增加LeveDefault,例如:MyGridControl.LevelDefaults.Add(RelationName,gridview);RelationName:DataSet中关系名gridview:第⼆步建⽴的GridView的名称⼆.DevExpress⼦视图的访问--当需要访问⽗视图中的⾏对应的⼦视图中的数据DevExpress.XtraGrid.Views.Grid.GridView bv =(DevExpress.XtraGrid.Views.Grid.GridView) gvMain.GetDetailView(MyGridControl.FocusedRowHandle,0) ; //0是关系索引for(int i=0 ;i<bv.DataRowCount ;i++){bv.GetDataRow(i)["列名"] = 值 ;}三.视图中的列为DevExpress.XtraEditors.Repository.RepositoryItemLookUpEdit 类型,但不想让⽤户看到下拉按钮编辑DevExpress.XtraEditors.Repository.RepositoryItemLookUpEdit控件,找到属性Buttons ,删除⾥⾯所有Button四.DevExpress设置控件脚处的汇总格式DevExpress控件SummaryItem.DisplayFormat={0:#} (数值类型)==================================================================devexpress 显⽰⾏号为XtraGrid的GridView加⾏号。
使用DevExpress GridControl实现复合表头并绑定数据作者:泪沉大海一.新建项目(新建一个窗体)二.将GridControl控件拖进窗体中三.修改参数与设置属性(这一步非常关键)1).设置GridControl的内置视图(view)为BandedGridView或者AdvBandedGridView2).内置视图转换后得到的数据表格样式会和原始的有所不同:3).点击“Run Designer”按钮进入设计界面:4).去掉数据表格上方的“Drag a column header here to group by that column”,一般这句话可要可不要,但是它的存在对美观有一定的影响,我们就把它去除,在设计界面中找到view选项卡,点击需要修改的视图,找到内置对象OptionsView,将其中的ShowGroupPanel改为False:5).设置需要展示出来的数据列,选中Columns选项卡:点击添加按钮进行列的添加:(增加5个需要显示的列:姓名,性别,小学,初中,高中):点击表示在最后一列之后新增一列点击表示在选中的列前方新增一列点击表示移除选中的列点击表示将选中的列上移点击表示将选中的列下移配置属性参数:选中其中的一个列,选中Column properties选项卡,其中需要重点注意的有以下3个属性:Caption:所显示的文字描述,FieldName:绑定的字段名称(与需要绑定的对象中的字段名称一一对应,严格区分大小写),(Name):别名,这个列的别名,也可以理解成这一个列的对象名,可改可不改,如果需要对这一列进行动态操作的话就需要改一下,改成容易识别和记忆的就可以了。
上面的设置完毕之后点击Column option选项卡,进行下一步设置:这里需要注意的是AllowSize属性设为False,表示允许列的尺寸修改,默认是True FixedWidth属性设为True,表示可以修改拖动列的宽度,设为True后将不能拖动改变宽度,默认是False6).设置绑定列:点击Bands选项卡,点击Add New Band……按钮,就会在上方出现绑定列,之前我们新增了5列,由于我们需要设置复合表头,那么我们将之前的5列中的3列归类在一个列下形成复合表头,那么这里绑定列就需要设置6列:接下来我们修改绑定列的属性:修改列显示名称:选中需要修改的列,找到属性卡中的Caption,对其值进行修改:修改其宽度:一个是显示宽度,一个是最小宽度,有些不需要改变宽度的列,就需要把显示宽度和最小宽度设置成同一个值我们注意到一个现象,列显示的文字没有居中,怎么办呢?接下来需要设置列文字居中显示:选中需要修改的列,在属性卡中找到AppearanceHeader属性,找到其中的TextOptions 属性,对其中的HAlignment属性修改为Center7).以上操作是对列的基本设置,我们对剩下的列进行一一设置,这里就不具体一个一个的讲了,因为步骤都是一样的,需要注意的是列宽问题,下面介绍一下如何实现复合表头从这里我们可以看出,小学、初中、高中应该是包含在学历这一个列里面的,下面就需要将这些列归拢在学历这一列下,如何操作呢?选中需要被合并的列,这里以小学为例,将其拖拽到学历这一列下面,注意拖拽的时候会出现两个箭头,这两个箭头就是指示这一列要拖拽到什么地方:值得注意的是出现的那两个箭头,横向箭头表示你现在拖动的这一列要放在那一列之下,纵向箭头表示你现在拖动的这里一列要放在那一列之后或者之前:同理我们将剩下的拖进去:8).通过上面几个步骤,我们把复合表头已经设计完毕,下面我们需要把字段(列)绑定在绑定列上:点击Show columns selector按钮将会弹出一个小对话,我们会发现,这个小对话框中的字段就是刚才我们新增并设置的那几个Column:9).将这些字段拖到需要绑定的列下方绑定完毕,这里绑定的数据列就是整个数据表格绑定的对象中的字段10).我们发现一个问题,列名是居中了,但是绑定的数据没有居中,那就需要来设置数据也居中,回到Columns选项卡,选中需要居中的数据列,更改AppearanceCell属性中的TextOption属性中的HAlignment改为Center既可让数据居中:11).查看效果:我们看到列名居中了,数据也居中了,那么问题又来了,中间那一行:红框中的这一行是用来做咩的呀?实际上这一行是用来提示开发者这一行所绑定的列是那一列,需要显示什么数据,但是没有实际的用途,我们就需要把它隐藏,设置以下步骤就可以隐藏这一行:四.到此为止绑定设置完毕,下面我们需要填充数据在表格设计的时候我们设置了5列,那么数据绑定就需要至少这个对象中包含这5个字段,这个数据的来源我们可以自己通过业务类来,也可以通过数据库中的数据表来,这里我们用业务类,然后将这个业务封装成List,让整个数据表格的数据源指向这个List 即可:添加一个叫做Persons的业务类,其中添加这5个字段:需要特别注意,这里的5个字段的字段名要和Column设置的时候FieldName一一对应,严格区分大小写,否则数据将不会被绑定,也不会被显示模拟数据(生成数据):最后一行表示数据源绑定五.运行程序查看效果:六.其他设置:设置隔行变色:设置默认第一行不选中、设置单元格第一个不选中、设置表格最前方第一列空白列不显示:这样一个复合表头的例子就做完了,大家注意到了没有,小学这一列没有显示,就是因为Persons类中的字段名称没有和对应的FieldName值对应,修改后的效果;由于DevExpress GridControl支持很多种使用特效,例如表格中有选择框,有文本框,有按钮,有下拉列表等等特效控件的设置,这里就不做一一介绍,等用到了在详细介绍,本文只是针对复合表头做介绍,如果有什么介绍的不到位的地方请大家给我指出,我将一一改进。
devexpressgridcontrol部分用法GridControl赋值:this.GridControl1.DataSouce=dt;2、GridContro总合计及分组合计:常规总合计直接RunDesigner-Group Summary ItemsDisplayFormat 设置显示格式如:{0:P}表示显示为百分号模式。
如数据源中为0.5。
表示出来为50%FieldName 设置显示的对应列ShowInGroupColumnFooter 在那一列下面显示SummaryType 合计方式。
选择Custom表示自定义。
CustomSummaryCalculate事件可处理View Code//Footer行自定义列合计1 GridView view = sender as GridView;2 if (e.Item == view.Columns["RateZk"].SummaryItem)3 {4 decimal x =Convert.ToDecimal(view.Columns["RetailFAmount"].Summary Item.SummaryValue);5 decimal y =Convert.ToDecimal(view.Columns["RetailAmount"].SummaryItem.SummaryValue);6view.Columns["RateZk"].SummaryItem.DisplayFormat = "{0:P}";7 if (y != 0)8 e.TotalValue = x / y;9 else10 e.TotalValue = 0;11 }View Code//分组行自定义合计列1 if (e.IsGroupSummary)2 {3 Hashtable ht =view.GetGroupSummaryValues(e.GroupRowHandle);45 foreach (DictionaryEntry entry in ht)6 {7 GridGroupSummaryItem sumItem = entry.Key as GridGroupSummaryItem;8 if (sumItem.FieldName.Equals("RetailFAmount"))9 retailFAmount =Convert.ToDecimal(entry.Value);10 }11 if(e.Item.ToString().Contains(view.Columns["RateZk"].Summary Item.FieldName))12 e.TotalValue = retailFAmount3、GridContro导出Excel操作:View Code1 SaveFileDialog saveFileDialog = new SaveFileDialog();2 saveFileDialog.Title = "导出Excel";3 saveFileDialog.Filter = "Excel文件(*.xls)|*.xls";4 DialogResult dialogResult =saveFileDialog.ShowDialog(this);5 if (dialogResult == DialogResult.OK)6 {7 this.gvbrowse.OptionsPrint.AutoWidth = false; //设置导出的Excel自动调整列宽,列宽和控件的列宽一致8this.gcbrowse.ExportToXls(saveFileDialog.FileName);9//this.gcbrowse.ExportToXlsOld(saveFileDialog.FileName);//这个方法默认会自动调整列宽,但是office10以上版本有的会报错10 DevExpress.XtraEditors.XtraMessageBox.Show("保存成功!", "提示", MessageBoxButtons.OK, rmation);11 this.gvbrowse.OptionsPrint.AutoWidth = true;12 }4、GridControl列要显示百分号:Run Designer-Columns列FormatType="Numeric" FormatString="p"5、gridView1.OptionsView.ShowGroupPanel = false; 不显示分组面板6、gridView1.OptionsBehavior.Editable=false; 数据只读7、设置列时间格式:Formatstring="yyyy-MM-dd HH:ss:mm"; FormatType="Numeric";设置列数字格式:Formatstring="N2";(数据格式:F表浮点,N表整数,数字表示保留几位小数。
DevExpress中GridControl的属性设置1. 隐藏最上面的GroupPanelgridView1.OptionsView.ShowGroupPanel=false;2.得到当前选定记录某字段的值sValue=Table.Rows[gridView1.FocusedRowHandle][FieldName].ToString();3.数据只读gridView1.OptionsBehavior.Editable=false;4.不显示MasterDetailViewgridView1.OptionsDetail.EnableMasterViewMode=false;5.修改最上面的GroupPanel内容gridView1.GroupPanelText="CSDN";6.数据绑定:FieldName --数据库的字段名称7.读写拷贝权限设置ColumnView.EditableThis property returns a value of the ColumnViewOptionsBehavior.Editable option不可写ColumnViewOptionsBehavior.EditableGets or sets whether end users are allowed to invoke cell editors可读可写OptionsColumn.AllowEditGets or sets whether end users are allowed to invoke editors for the column's cells.可读可写只有ColumnViewOptionsBehavior.Editable=True 设置OptionsColumnAllowEdit 才有意义。
OptionsColumn.ReadOnlyGets or sets whether end-users are prevented from editing the column's cell values.可读可写只读不可拷贝:ColumnViewOptionsBehavior.Editable = False只读可拷贝:ColumnViewOptionsBehavior.Editable = TrueOptionsColumn.AllowEdit = TrueOptionsColumn.ReadOnly = True可编辑:ColumnViewOptionsBehavior.Editable = TrueOptionsColumn.AllowEdit = TrueOptionsColumn.ReadOnly = False获取选中行的值代码:private void gridData_FocusedRowChanged(object sender,DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e){_id=GWEntLib.Utilities.Mix.ConvertUtils.ToInt32(gridData.GetRowCellValu(e.Focu sedRowHandle, "Id"));_emrFileReadList = EMRTemplateFileReadList.GetEMRTemplateFileReadList(_id);gridVersonData.DataSource = _emrFileReadList;}响应事件:FocusedRowChanged获取字段值:gridData.GetRowCellValue(e.FocusedRowHandle, "Id")注意:FocusedRowChanged是Gridview的事件而不是gridControl的事件gridControl与Gridview的区别:前者是容器,后者为视图全选/取消全选private void Form1_Load(object sender, EventArgs e){String str =@”select cast( 0 as bit ) 选择,ID,NameFrom ”DataTable dt =new DataTable();dt =SqlHelper.ExecuteDataset(str).Tables[0];gridView.DataSource =dt;}#region全选private void tsbSelectAll_Click(object sender, EventArgs e){for (int i = 0; i < gridView.RowCount; i++){gridView.SetRowCellValue(i, gridView.Columns.ColumnByFieldName("选择"), true);}}#endregion#region取消全选private void tsbUnSelectAll_Click(object sender, EventArgs e){for (int i = 0; i < gridView.RowCount; i++){gridView.SetRowCellValue(i, gridView.Columns.ColumnByFieldName("选择"), false);}}#endregion。
DevExpress控件之GridControl控件(代码篇)Developer Express(以下简称dev) 这个第三⽅控件是VS2005⾃带的datagridview控件的重写版本.对于⼀些grid外观,模板列的设置有⾮常简单的⽅法.⽽且控制起来基本和 datagridview⼀样.所以还是⽐较⽅便的.把dev控件拖到窗体以后,会发现多了两个控件gridcontrol1,gridview1,下⾯针对这期间使⽤dev的⼀些总结写在下⾯(主要是连接数据库,绑定字段和模板列的设置):1. 设置数据源:string sql = "select fid,fname from dual";DataTable dt = DALUse.Query(sql).Tables[0];gridControl1.DataSource = dt;*:Daluse是项⽬数据库连接基类,不⽤特别理会2.绑定字段:这部分⼯作主要是在Designer中进⾏的,dev的Designer设计器提供了⾮常⽅便的设置⽅式.我么可以省去敲代码,直接在设计器中就可以完成了.在左边选Columns,添加完列以后,在列的FieleName属性添加你要绑定列的字段名(ps:⽐如我的连接SQL语句是:select fid,fname from dual.我想要把fid绑定到列1.那就在列1的FieldName属性写FID就可以了 ),这⾥有⾮常重要的⼀点,对于Oracle数据库,所有的在设计器⾥写的程序中的字段名必须⼤写,否则可能绑定不上字段,sqlserver没有这个限制.通过代码其实也可以实现,具体代码如下:gridView1.Columns[0].FieldName = "FID";*:gridcontrol只⽤在设置数据源,以后的操作⼤多都有gridview这个控件了.他们是⼀体的,可以在页⾯的设计代码中找到将他们关联的⼀句话,这是系统⾃动写的:gridcontrol1.mainview=this.gridview1.2. 模板列的设置:模板列可以很轻松的让⽤户实现在表格中进⾏查找编辑.同样,这部分⼯作在dev的Designer中进⾏.在左边选In-Place Editor Repository,上⾯的ADD提供了⽐较丰富的模板列类型,从中选取⼀个就可以了.模板列建好以后就要和我们当前有的数据列进⾏绑定了.返回到 Columns中,假如列1是我们想设定的,在他的属性中找到ColumnEdit.选择我们加进去的模板列就可以了.对于模板列我们最常⽤的还是 LookUpEdit.这⾥简单说下他的设置和⽤法:LookUpEdit是弹出的⼀个⼩的grid,从它⾥⾯我们可以实现⾃动筛选⾥⾯的信息.⾸先从In-Place Editor Repository中添加LookUpEdit.取名为Re1.然后.在他的Columns属性中添加3列.Caption依次为:编号,姓名,性别.FieldName依次为:FID,FNAME,FSEX.然后将Re1的NullText设置成空.AutoSearchColumnIndex属性设置为2.ImmediatePopup属性设置为True.SearchMode设置为OnlyInPopup.然后将这个模板列附加到我们上⾯提到的列1(也就是将列1的ColumnEdit属性设成Re1)最后我们还要在代码⾥⾯给Re1绑定数据源和显⽰项.Re1.DataSource = DALUse.Query("select fid,fname,fsex from dual").Tables[0];Re1.DisplayMember = "FSEX";Re1.ValueMember = "FNAME";*:对于Oracle数据库字段⼀定要⽤⼤写,切记!!⾄此,我们的LookUpEdit模板列就设置完成了,它现在已经实现了通过性别列检索,然后将姓名列附到我们的列1上.对于LookUpEdit可以实现过滤主要是AutoSearchColumnIndex和SearchMode属性.可以参见帮助知道它们的⽤法: ms-help://v7.2/DevExpress.XtraEditors/DevExpressXtraEditorsControlsSearchModeEnumtopic.htmPs://去掉上⾯的筛选条gridView1.OptionsView.ShowGroupPanel = false;//设某⼀列只读或者不可编辑gridView1.Columns[0].OptionsColumn.AllowEdit = false;gridView1.Columns[0].OptionsColumn.ReadOnly = false;// 设某⼀列⽂字和标题局中显⽰ gridView1.Columns[0].AppearanceHeader.TextOptions.HAlignment =DevExpress.Utils.HorzAlignment.Center;gridView1.Columns[0].AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;//去掉某⼀列上⾯的⾃动筛选功能(Filter) gridView1.Columns[0].OptionsFilter.AllowAutoFilter = false;gridView1.Columns[0].OptionsFilter.AllowFilter = false; gridView1.Columns[0].OptionsFilter.ImmediateUpdateAutoFilter = false; //设置冻结列(左冻结)gridView1.Columns[0].Fixed= DevExpress.XtraGrid.Columns.FixedStyle.Left;//得到单元格数据(0⾏0列)string ss=gridView1.GetRowCellDisplayText(0, gridView1.Columns[0]);string ss = gridView1.GetRowCellValue(0, gridView1.Columns[0]);//设置单元格数据(将0⾏0列的单元格赋值123)gridView1.SetRowCellValue(0, gridView1.Columns[0], "123");//⼿动添加dev的列DevExpress.XtraGrid.Columns.GridColumn Col1=new DevExpress.XtraGrid.Columns.GridColumn ();Col1.FieldName="FID";Col1.Visible=true;Col1.VisibleIndex=gridView1.Columns.Count;gridView1.Columns.Add(Col1);//设置⾃动增加的⾏号,需要先添加给gridview添加事件CustomDrawRowIndicatorprivate void gridview_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e){if (.IsRowIndicator && e.RowHandle >= 0).DisplayText = (e.RowHandle + 1).ToString();}//添加datatable数据⾏,数据列DataTable dt = new DataTable();dt.Columns.Add("Col1");DataRow dr = dt.NewRow();dr[0] = "123";dt.Rows.Add(dr);*以上这些都可以在Designer中进⾏设置,⽽不⽤去敲代码对于第三⽅控件的整体修改和保存,具体说明如下:1. 删除: (修改了dgvdel⾥的datagridviewdel⽅法)public static void datagridviewdel_Dev(DevExpress.XtraGrid.Views.Grid.GridView Mydgv){if (MessageBox.Show("你确定要删除选中的记录吗?", "删除提⽰", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2, 0, false) == DialogResult.Yes){int iSelectRowCount = Mydgv.SelectedRowsCount;if (iSelectRowCount > 0){Mydgv.DeleteSelectedRows();}}}2. 新增: (对于新增,其本⾝的AddNewRow⽅法就可以做到)private void btn_add_Click(object sender, EventArgs e){gridView1.AddNewRow();}具体如果对于新加⾏还有什么特别的设置,可以在它gridView1_InitNewRow事件中填写:private void gridView1_InitNewRow(object sender, DevExpress.XtraGrid.Views.Grid.InitNewRowEventArgs e){ColumnView View = sender as ColumnView;View.SetRowCellValue(e.RowHandle, View.Columns[0],gridView1.GetRowCellValue(gridView1.GetRowHandle(gridView1.RowCount - 2), gridView1.Columns[0])); //复制最后⼀⾏的数据到新⾏ View.SetRowCellValue(e.RowHandle, View.Columns[1],gridView1.GetRowCellValue(gridView1.GetRowHandle(gridView1.RowCount - 2), gridView1.Columns[1])); //复制最后⼀⾏的数据到新⾏ }3. 保存 (第三⽅控件提供的RefreshData和RefreshDataSource⽅法对于保存数据都不好使,最后还是使⽤了Dgvsave的datagridviewsave⽅法,⽤这个⽅法就可以)注:代码中出现多gridView1全为第三⽅控件的gridView.⽰例:去掉上⾯的”Drag a column header here to group by that column”我们拖动⼀个gridcontrol控件后,在出现上会出现⼀下效果:他默认的好多地⽅都是⽤英⽂表⽰出来的,所以我们得⽤⼀些相关的属性设置来达到我们实际想要达到的效果.⾸先就是要去掉上⾯的⼀个英⽂条”Drag a column header here to group by that column”.我们可以通过⼿⼯设置和代码编写来实现,以后针对第三⽅控件的属性都可以⽤这两种⽅法来实现.⼿⼯设置:点击左下⾓的”Run Designer”按钮.这样我们就进⼊了Dev的设计器(所有的对于控件的控制都可以在这⾥设置).然后点击左边的Main选项卡中的 Views项.有边栏⽬⾥会出现N多属性,我们找到OptionViews,展开它,然后将⾥⾯的ShowGroupPanel属性设成false就OK 了.代码编写:我们可以直接在构造函数或者页⾯的打开事件中写⼊代码:gridView1.OptionsView.ShowGroupPanel = false;两种⽅法可以达到同样的效果.设置外观接下来我们来设置它的外观.Dev给我们提供了很多外观的模板,这样使得我们不⽤在通过复杂的代码来设置他的外观,我们直接⽤⼿⼯设置就可以完成了!点击Dev设计器中左边的Appearance选项卡的Style Schemes项:通过在⾥⾯设置外观,然后点击右⼩⾓的Apply按钮就可以很轻松的设置各种各样的外观了.去掉控件默认的Filter功能出现英⽂的情况我们按照上⾯所讲的⽅法给Dev添加列后,在点击列头的⼩按钮的时候会出现这样的效果(出现了我们不想看到的英⽂):这个对于我们来说是⽐较讨厌的.我们可以在Dev的设计器中消灭它.点击设计器中左边的Main选项卡的Columns项.选择你想设置的列,然后点击右上⾓他们的选项卡:选择Filter options选项卡,然后将⾥⾯的AllowAutoFilter,AllowFilter,ImmediateUpdateAutoFilter属性分别设成false就可以了.这样这列的AutoFilter功能就去掉了(仅限于这列)!如果你够细⼼的话,你会发现上⾯的选项卡Column options⾥⾯的属性也都是特别使⽤的:这⾥⾯的属性不⽤说,我想你也知道怎么⽤了(他也是只针对⼀列设置的).关闭右键点击列头会出现英⽂的情况:在Dev的设计器中选择左边Main选项卡中的Views项.找到OptionsMenu,然后展开,将⾥⾯的EnableColumnMenu设成false就可以了.。
DevExpress控件--Gridcontrol合并表头写在前⾯的话: 在园⼦⾥逛了有⼀段时间了,⼀直想写点东西,但苦于⾃⼰的⽔平有限,⽣怕写出来的东西浪费了读者的时间。
楼主有幸参加了公司DevExpress控件的培训,独乐乐不如众乐乐,特附上Demo以飨读者!using System;using System.Collections.Generic;using ponentModel;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是表格上的默认视图,注意这⾥声明的是:BandedGridViewBandedGridView 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 += newDevExpress.XtraGrid.Views.Base.CustomColumnDataEventHandler(advBandedGridView1_CustomUnboundColumnData);//[性别]列绑定ComboBoxRepositoryItemComboBox riCombo = new RepositoryItemComboBox();riCombo.Items.AddRange(new string[] { "男", "⼥" });gridControl1.RepositoryItems.Add(riCombo);view.Columns["Sex"].ColumnEdit = riCombo;//[出⽣年⽉]列绑定DateRepositoryItemDateEdit riDate = new RepositoryItemDateEdit();gridControl1.RepositoryItems.Add(riDate);view.Columns["Birth"].ColumnEdit = riDate;//[分数]列绑定SpinEditRepositoryItemSpinEdit riSpin = new RepositoryItemSpinEdit();gridControl1.RepositoryItems.Add(riSpin);view.Columns["Math"].ColumnEdit = riSpin;view.Columns["Chinese"].ColumnEdit = riSpin;view.Columns["English"].ColumnEdit = riSpin;//[备注]列绑定MemoExEditRepositoryItemMemoExEdit 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; = 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表达式列DevExpress GridControl是一个功能强大的网格控件,它允许在表格中显示和编辑数据。
可以使用表达式列(Expression Column)来在GridControl中添加计算列,这些列的值通过计算其他列的值而得出。
以下是一个示例,展示如何在DevExpress GridControl中添加表达式列:1.创建GridControl和GridView对象:GridControl gridControl1 = new GridControl();GridView gridView1 = new GridView(gridControl1);gridControl1.MainView = gridView1;2.添加需要显示的数据列:gridView1.Columns.AddField("Column1").VisibleIndex = 0;gridView1.Columns.AddField("Column2").VisibleIndex = 1;3.定义表达式列并设置表达式:GridColumn expressionColumn = gridView1.Columns.AddField("ExpressionColumn");expressionColumn.VisibleIndex = 2;expressionColumn.Caption = "Expression Column";expressionColumn.UnboundType = DevExpress.Data.UnboundColumnType.Integer; // 设置列的数据类型expressionColumn.UnboundExpression = "[Column1] + [Column2]"; // 设置表达式,这里示例是将Column1和Column2的值相加4.将数据源设置为GridControl,并显示GridControl:gridControl1.DataSource = YourDataSource;gridControl1.Dock = DockStyle.Fill;this.Controls.Add(gridControl1);在这个示例中,我们首先创建一个GridControl和GridView对象,并添加两个数据列(Column1和Column2)。
Dev Express GridControl详解(一)原汁原味的表格展示Dev控件中的表格控件GridControl控件非常强大。
不过,一些细枝末节的地方有时候用起来不好找挺讨厌的。
使用过程中,多半借助Demo和英文帮助文档。
网上具体的使用方法也多半零碎。
偶遇一个简单而且详细的使用文档。
好记性不如烂笔头!转载过来,整理整理发出来做个记录,总共有十个小节。
做的非常精细,非常感谢原作者。
插件所在位置使用时拖拽过来,如下所示即使拖拽过来原封不动的样子:在程序中写入构建一个表格的代码:[csharp]view plaincopyprint?1. private DataTable InitDt()2.{3.DataTable dt = new DataTable("个人简历");4.dt.Columns.Add("id",typeof(int));5.dt.Columns.Add("name", typeof(string));6.dt.Columns.Add("sex", typeof(int));7.dt.Columns.Add("address", typeof(string));8.dt.Columns.Add("aihao", typeof(string));9.dt.Columns.Add("photo", typeof(string));10.dt.Rows.Add(new object[] { 1, "张三", 1, "东大街6号", "看书", "" });11.dt.Rows.Add(new object[] { 1, "王五", 0, "西大街2号", "上网,游戏", "" });12.dt.Rows.Add(new object[] { 1, "李四", 1, "南大街3号", "上网,逛街", "" });13.dt.Rows.Add(new object[] { 1, "钱八", 0, "北大街5号", "上网,逛街,看书,游戏", "" });14.dt.Rows.Add(new object[] { 1, "赵九", 1, "中大街1号", "看书,逛街,游戏", "" });15.return dt;16.}17.<P> </P>书写gridControl1绑定数据方法:[csharp]view plaincopyprint?1. private void BindDataSource(DataTable dt)2.{3.//绑定DataTable4.gridControl1.DataSource = dt;5.//绑定DataSet6.//gridControl1.DataSource = ds;7.//gridControl1.DataMember = "表名";8.}程序调用:BindDataSource(InitDt());呈现结果如下:(二)表格的列名配置点击Run Designer控件上的按钮,弹出视图设计窗口:列配置:我们配置完列名后,会发现设计视图发生了变化:运行结果:(三)列数据的格式设置为了测试方便,我们加入新的3列,格式分别是数据,时间,字符串。
代码增加下列部分:[csharp]view plaincopyprint?1.//格式增加2.dt.Columns.Add("数据",typeof(decimal));3.dt.Columns.Add("时间",typeof(DateTime));4.dt.Columns.Add("自定义",typeof(string));5.dt.Rows.Add(new object[] { 1, "张三", 1,"东大街6号","看书","",-52.874,"2011-8-517:52:55","###" });6.dt.Rows.Add(new object[] { 1, "王五", 0,"西大街2号","上网,游戏","", -37.257,"2011-8-517:52:55" });7.dt.Rows.Add(new object[] { 1, "李四", 1,"南大街3号","上网,逛街","", -54.254,"2011-8-917:52:55" });8.dt.Rows.Add(new object[] { 1, "钱八", 0,"北大街5号","上网,逛街,看书,游戏","",-35.127,"2011-8-9 17:52:55" });9.dt.Rows.Add(new object[] { 1,"赵九", 1,"中大街1号","看书,逛街,游戏","",-29.548,"2011-8-9 20:52:55" });给gridControl1增加3列,对应上述三列。
数据:具体数据公式可以查看输入控件的MASK设置器,里面有全部的格式公式:运行结果:时间:自定义:事件转换:概念明确:1. gridControl1的每一列原始数据是Value,但是显示数据是DisplayText,默认DisplayText的值即是Value 通过DisplayFormat转换之后的值。
2. gridControl下的事件一般是包含表格GridView切换,点击,更改的事件,用的不多;每一个GridView 下的事件包含行列处理,菜单显示,分组排序等事件,我们常用。
(所有在使用事件时,一定要明确是control 事件还是view事件)GridView存在事件:自定义列显示事件增加事件:[csharp]view plaincopyprint?1.privatevoidgridView1_CustomColumnDisplayText(objectsen der,DevExpress.XtraGrid.Views.Base.CustomColumnDisp layTextEventArgse)2.{3.if(e.Column.FieldName =="sex")4.{5.switch(e.Value.ToString().Trim())6.{7.case"1":8. e.DisplayText = "男";9.break;10.case"0":11. e.DisplayText = "女";12.break;13.default:14. e.DisplayText = "";15.break;16.}17.}18.}显示结果:(四)分组排序汇总分组:按时间分第一组:按性别分第二组:显示结果:高级设置:将所有组展开代码:gridView1.ExpandAllGroups(); 显示结果:自定义组名,GridView级事件增加事件:[csharp]view plaincopyprint?1.private void gridView1_CustomDrawGroupRow(object sender, DevExpress.XtraGrid.Views.Base.RowObjectCustomDrawEventArgs e)2.{3.GridGroupRowInfo GridGroupRowInfo = as GridGroupRowInfo;4.GridGroupRowInfo.GroupText = "第" + (e.RowHandle).ToString() + "行 " + GridGroupRowInfo.EditValue.ToString();5.}显示结果:注意:每一行都有一个RowHandle属性,普通行的RowHandle为非负整数,从0开始;组行排序:排序设置显示结果:汇总:汇总数据列设置注意:汇总结果是显示在Footer面板中的,gridControl中的Footer面板默认是不显示的,所以如果要汇总数据,那么必须先设置Footer面板显示。
显示结果:组计:代码:[csharp]view plaincopyprint?1.gridView1.GroupSummary.Add(DevExpress.Data.SummaryItemType.Sum, "数据", gridColumn7, "组计:{0}");结果显示(五)设置行备注和行号备注显示设置设置备注字段显示结果:可以写入按键事件F3,用以开关备注显示[csharp]view plaincopyprint?1.private void Form4_KeyUp(object sender, KeyEventArgs e)2.{3.if (e.KeyCode == Keys.F3)4.{5.gridView1.OptionsView.ShowPreview = !gridView1.OptionsView.ShowPreview;6.}7.}行号显示要用到的事件:代码:[csharp]view plaincopyprint?1.private void gridView1_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)2.{3.if (.IsRowIndicator)4.{5. .DisplayText = "Row " + e.RowHandle.ToString();6.}7.}8.gridView1.IndicatorWidth = 70;显示结果(六)样式设置表格样式:全局设置例子:例子:列样式:只作用于当前的列通用样式:外观设定注意:样式设定都是相同的,Appearance前缀。