使用DevExpress GridControl实现复合表头并绑定数据
gridcontrol绑定数据源的方法

gridcontrol绑定数据源的方法以gridcontrol绑定数据源的方法为标题,写一篇文章。
一、引言在软件开发中,常常需要使用表格展示和编辑大量的数据。
而gridcontrol是一种常见的控件,可以方便地实现数据的展示和编辑。
本文将介绍如何使用gridcontrol控件来绑定数据源,以便快速、高效地展示和编辑数据。
二、准备工作在开始使用gridcontrol之前,需要进行一些准备工作。
首先,需要在项目中引入DevExpress的相关库文件,以便使用gridcontrol 控件。
其次,需要准备好数据源,可以是数据库中的数据表,也可以是其他的数据集合。
三、绑定数据源1. 创建gridcontrol控件在窗体或用户控件中创建一个gridcontrol控件。
可以通过拖拽的方式将gridcontrol控件添加到窗体中,也可以在代码中动态创建gridcontrol控件。
2. 创建数据源对象在代码中创建数据源对象,并将数据源对象与gridcontrol控件进行绑定。
数据源对象可以是DataTable、DataSet、List等类型的对象。
3. 绑定数据源使用gridcontrol控件的DataSource属性,将数据源对象与gridcontrol控件进行绑定。
具体代码如下所示:gridControl1.DataSource = 数据源对象;四、设置列信息绑定数据源之后,需要设置gridcontrol控件的列信息,以便正确地展示和编辑数据。
可以通过代码或者设计器来设置列信息。
1. 通过代码设置列信息可以使用gridcontrol控件的Columns属性,通过代码来设置列信息。
可以设置列的显示名称、宽度、数据类型等。
具体代码如下所示:gridView1.Columns[0].Caption = "列名";gridView1.Columns[0].Width = 100;gridView1.Columns[0].ColumnEdit = new RepositoryItemTextEdit();2. 通过设计器设置列信息可以使用设计器来设置列信息。
DevExpress使用方法GridControl总结

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="柳⽣飘絮";6.数据绑定:FieldName --数据库的字段名称7.读写拷贝权限设置ColumnView.EditableThis property returns a value of the 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设置OptionsColumn.AllowEdit才有意义OptionsColumn.ReadOnlyGets or sets whether end-users are prevented from editing the column's cell values.可读可写If the ReadOnly property is set to true, the cell values of columns cannot be modified by end-users. In this case cell editors can be invoked but end users can only select and copy an editor's content. This option is not in effect if the column's or the view's option is disabled.Cell values can still be modified in code using the method regardless of the ReadOnly property's setting.只读不可拷贝:ColumnViewOptionsBehavior.Editable = False只读可拷贝:ColumnViewOptionsBehavior.Editable = TrueOptionsColumn.AllowEdit = TrueOptionsColumn.ReadOnly = True可编辑:ColumnViewOptionsBehavior.Editable = TrueOptionsColumn.AllowEdit = TrueOptionsColumn.ReadOnly = False=============================================================⼀、如何解决单击记录整⾏选中的问题View->OptionsBehavior->EditorShowMode 设置为:Click⼆、如何新增⼀条记录(1)、gridView.AddNewRow()(2)、实现gridView_InitNewRow事件三、如何解决GridControl记录能获取⽽没有显⽰出来的问题gridView.populateColumns();四、如何让⾏只能选择⽽不能编辑(或编辑某⼀单元格)(1)、View->OptionsBehavior->EditorShowMode 设置为:Click(2)、View->OptionsBehavior->Editable 设置为:false五、如何禁⽤GridControl中单击列弹出右键菜单设置Run Design->OptionsMenu->EnableColumnMenu 设置为:false六、如何隐藏GridControl的GroupPanel表头设置Run Design->OptionsView->ShowGroupPanel 设置为:false七、如何禁⽤GridControl中列头的过滤器过滤器如下图所⽰:设置 Run Design->OptionsCustomization->AllowFilter 设置为:false⼋、如何在查询得到0条记录时显⽰⾃定义的字符提⽰/显⽰如图所⽰:⽅法如下://When no Records Are Being Displayed private void gridView1_CustomDrawEmptyForeground(object sender, CustomDrawEventArgs e) { //⽅法⼀(此⽅法为GridView设置了数据源绑定时,可⽤) ColumnView columnView = sender as ColumnView; BindingSource bindingSource = this.gridView1.DataSource as BindingSource;if(bindingSource.Count == 0) { string str = "没有查询到你所想要的数据!"; Font f = new Font("宋体", 10, FontStyle.Bold); Rectangle r = new Rectangle(e.Bounds.Top + 5, e.Bounds.Left + 5, e.Bounds.Right - 5, e.Bounds.Height - 5); e.Graphics.DrawString(str, f, Brushes.Black, r); } //⽅法⼆(此⽅法为GridView没有设置数据源绑定时,使⽤,⼀般使⽤此种⽅法) if (this._flag) { if (this.gridView1.RowCount == 0) { string str = "没有查询到你所想要的数据!"; Font f = new Font("宋体", 10, FontStyle.Bold); Rectangle r = new Rectangle(e.Bounds.Left + 5, e.Bounds.Top + 5, e.Bounds.Width - 5, e.Bounds.Height - 5); e.Graphics.DrawString(str, f, Brushes.Black, r); } } }九、如何显⽰⽔平滚动条?设置this.gridView.OptionsView.ColumnAutoWidth = false;⼗、如何定位到第⼀条数据/记录?设置 this.gridView.MoveFirst()⼗⼀、如何定位到下⼀条数据/记录?设置 this.gridView.MoveNext()⼗⼆、如何定位到最后⼀条数据/记录?设置 this.gridView.MoveLast()⼗三、设置成⼀次选择⼀⾏,并且不能被编辑this.gridView1.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFocus; this.gridView1.OptionsBehavior.Editable = false;this.gridView1.OptionsSelection.EnableAppearanceFocusedCell = false;⼗四、如何显⽰⾏号?this.gridView1.IndicatorWidth = 40; //显⽰⾏的序号 private void gridView1_CustomDrawRowIndicator(object sender, RowIndicatorCustomDrawEventArgs e) { if(.IsRowIndicator && e.RowHandle>=0) { .DisplayText = (e.RowHandle + 1).ToString(); } }⼗五、如何让各列头禁⽌移动?设置gridView1.OptionsCustomization.AllowColumnMoving = false;⼗六、如何让各列头禁⽌排序?设置gridView1.OptionsCustomization.AllowSort = false;⼗七、如何禁⽌各列头改变列宽?设置gridView1.OptionsCustomization.AllowColumnResizing = false;=======================================================================================devexpress表格控件gridcontrol设置隔⾏变⾊、焦点⾏颜⾊、设置(改变)显⽰值、固定列不移动(附源码)介绍⼀些常⽤的gridcontrol设置。
devexpressgridcontrol部分用法

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的属性设置及动态绑定数据和全选取消全选

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控件(代码篇)

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就可以了.。
devgridcontrol(一)绑定值

devgridcontrol(一)绑定值Dev组件包功能强大,但说明性的文档太少也给我们使用带来的很大的障碍。
最近项目需要使用Dev控件,把点点滴滴记录在这里备忘。
1,适当调整列宽(当列很多时)gridView1.OptionsView.ColumnAutoWidth= false;gridView1. BestFitColumns();2,多选gridView1 .OptionsSelection.MultiSelect = true;gridView1 .OptionsSelection.MultiSelectMode = DevExpress.XtraGrid.Views.Grid.GridMultiSelectMode.RowSelect;3,添加复选框列添加一列,FieldName为 "check",将ColumnEdit 设置为复选框样式。
将要绑定的DataTable添加列 "check",Type 为 bool。
绑定DataTable到GridControl。
获取:string value = gridview.GetDataRow(i)["check"].toString();value == "true" || "" ("false")4,GroupPanel设置gridView1.GroupPanelText="title";gridView1.OptionsView.ShowGroupPanel=false;gridView1.OptionsView.ShowGroupPanel = false;取消显示头部的pannelgridView1.OptionsView.EnableAppearanceOddRow = true;奇偶显示选中变色gridView2.Appearance.FocusedRow.BackColor = System.Drawing.Color.RoyalBlue;设成只读1. gridView1.OptionsBehavior.Editable = false;2. gridView1.Columns[5].readonly= true;左边表头去掉gridView1.Options.OptionView .ShowIndicator=False;--------------------------------------------------------------------------------------------------------------------------------------------------------取值1.private void gridControl1_DoubleClick(object sender, System.EventArgs e){//双击弹出异常日志描述if (this.gridView1.RowCount > 0){int[] a=this.gridView1.GetSelectedRows();stringstr_GUID=this.gridView1.GetRowCellValue(a[0],"Ex_No").ToString ();//获得异常编号MessageBox.Show(str_GUID);frmExceptionLogDesc dlg=new frmExceptionLogDesc();dlg.Text = "异常日志查看";dlg.ShowDialog();}}取值2.private void gridControl1_DoubleClick(object sender, EventArgs e){// erInfo model = (sender as DevExpress.XtraGrid.GridControl).DataSource as erInfo;if (this.gridView1.RowCount > 0){int[] selectRow = this.gridView1.GetSelectedRows();erInfo model = gridView1.GetRow(selectRow[0]) as erInfo;// string UserName = this.gridView1.GetRowCellValue(selectRow[0], "UserName").ToString();//获得异常编号UserInfo ui = new UserInfo();erInfoModel = model;ui.Show();}}补充:(6)barManager的具体设置在增加了barManager控件以后,在[Click Here to add MainMenu] [Click Here to Tool Bar]里面选择[Click Here to Tool Bar] 填写需要新增的工具栏按钮。
关于第三方控件DevExpress中XtraGrid用法,动态邦定数据

关于第三方控件DevExpress中XtraGrid用法,动态邦定数据关于第三方控件DevExpress中XtraGrid用法,动态邦定数据DataTable data = DAL.XXDA.EDIT.spda.get("SelectAll", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "");//创建一个新列DevExpress.XtraGrid.Columns.GridColumn con = new DevExpress.XtraGrid.Columns.GridColumn();con.FieldName = "item_no";//对应邦定的名称 = "编号";con.Caption = "编号";//显示给用户的名称con.Visible = true;con.VisibleIndex = 0;//显示列的位置this.gridView1.Columns.Add(con);con = new DevExpress.XtraGrid.Columns.GridColumn();con.FieldName = "barcode"; = "条形码";con.Caption = "条形码";con.Visible = true;con.VisibleIndex = 1;this.gridView1.Columns.Add(con);con = new DevExpress.XtraGrid.Columns.GridColumn();con.FieldName = "item_name";// = "商品名称";con.Caption = "商品名称";con.Visible = true;con.VisibleIndex = 2;//this.gridView1.Columns.Add(con);//邦定this.gridControl1.DataSource = data;//设置行标题的宽度gridView1.IndicatorWidth = 60;//获取单元格的值string str=this.gridView1.GetRowCellDisplayText(0, this.gridView1.Columns[0]);。
DevExpress控件--Gridcontrol合并表头

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}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
使用DevExpress GridControl实现复合表头并绑定数据
作者:泪沉大海
一.新建项目(新建一个窗体)
二.将GridControl控件拖进窗体中
三.修改参数与设置属性(这一步非常关键)
1).设置GridControl的内置视图(view)为BandedGridView或者AdvBandedGridView
2).内置视图转换后得到的数据表格样式会和原始的有所不同:
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后将不能拖动改变宽度,默认是False
6).设置绑定列:
点击Bands选项卡,点击Add New Band……按钮,就会在上方出现绑定列,之前我们新增了5列,由于我们需要设置复合表头,那么我们将之前的5列中的3列归类在一个列下形成复合表头,那么这里绑定列就需要设置6列:
接下来我们修改绑定列的属性:
修改列显示名称:选中需要修改的列,找到属性卡中的Caption,对其值进行修改:
修改其宽度:一个是显示宽度,一个是最小宽度,有些不需要改变宽度的列,就需要把显示宽度和最小宽度设置成同一个值
我们注意到一个现象,列显示的文字没有居中,怎么办呢?接下来需要设置列文字居中显示:
选中需要修改的列,在属性卡中找到AppearanceHeader属性,找到其中的TextOptions 属性,对其中的HAlignment属性修改为Center
7).以上操作是对列的基本设置,我们对剩下的列进行一一设置,这里就不具体一个一个的讲了,因为步骤都是一样的,需要注意的是列宽问题,下面介绍一下如何实现复合表头
从这里我们可以看出,小学、初中、高中应该是包含在学历这一个列里面的,下面就需要将这些列归拢在学历这一列下,如何操作呢?选中需要被合并的列,这里以小学为例,将其拖拽到学历这一列下面,注意拖拽的时候会出现两个箭头,这两个箭头就是指示这一列要拖拽到什么地方:
值得注意的是出现的那两个箭头,横向箭头表示你现在拖动的这一列要放在那一列之下,纵向箭头表示你现在拖动的这里一列要放在那一列之后或者之前:
同理我们将剩下的拖进去:
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支持很多种使用特效,例如表格中有选择框,有文本框,有按钮,有下拉列表等等特效控件的设置,这里就不做一一介绍,等用到了在详细介绍,本文只是针对复合表头做介绍,如果有什么介绍的不到位的地方请大家给我指出,我将一一改进。
联系方式:QQ996028025。