DevExpressVCLcxGrid详解(入门者)
- 格式:pdf
- 大小:2.74 MB
- 文档页数:21
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列,格式分别是数据,时间,字符串。
DevExpressVCLcxGrid详解(入门者)DelphicxGrid实用教程:LookAndFeel是设置外观感觉运行delphi 7,建一个application,拖上cxgrid控件,加入数据库控件,此处不需要多讲。
如下图:glBoxPacking,btvBoxPacking是自己定义的名字。
1. 把cxgrid连上datasouce:点一下中的glBoxpacking,然后设定dsA 不显示下面的Drag a columm header here to group by thatcolumn:设置如下:点击btvBoxPacking,选中“OptionsView”->GroupByBox 设为False,如图:设置完后显示:在cxGrid控件上双击调出设置画面,或者单击中“Customize”,画面如下:因为cxGrid标题为多行合并标题,所以需要在views里增加cxGridDBBandedTableView,然后删除原来的cxGridDBTableView,如下图:命名为bbtvBoxPacking,删除btvBoxPacking。
然后选中structure,在“GridView”中选取“bbtvBoxPacking”,结果如下图:先设定“Columns”中列。
(这时查看一下cxGrid中的DataSouce存不存在,可能会因删除btvBoxPacking,而清空,如果不存在,选中即可)如果要显示DataSouce里所有的列,可以点击上图中的“Retrieve Fields”,这里选取所有的,如果有ADD的话,需要手动指定DataField是哪一列,和数据库表的字段名一样。
这时,cxGrid会显示如下图:在“Bands”中,选增加需要绑定的列。
这里总共增加三列。
依次类推:然后在Columms中选取需要绑定的列,进行绑定,如下图:依次类推,全部设置完后,如下图:如不想每列都出现下面的箭头,可以选中此列,做如下修改:改变下线边框的格式:在如下画面里做修改:设定双标题头:插入页脚:加入页脚选中图中的地方,其它的类似。
CXGRID控件使用说明一、安装CXGRID控件3. 在弹出的对话框中点击"Add"按钮,然后浏览到CXGRID控件的文件夹,选择"dcldxGridLib.dpk"文件,点击"OK"按钮。
4. 在"Installed packages"列表中选中CXGRID控件,点击"Load"按钮。
二、创建CXGRID控件1. 在Delphi中创建一个新的窗体或数据模块。
2.在控件面板中找到CXGRID控件,将其拖放到窗体或数据模块上。
3. 双击CXGRID控件,调出Object Inspector窗口,可以对CXGRID 控件进行属性设置,比如添加数据源、设置列、设计外观等。
三、设置数据源1. 在Object Inspector窗口中找到"DataSource"属性,并将其设置为一个有效的数据源组件,比如TDataSource。
2. 在"Columns"属性中设置数据表格的列和字段对应关系,可以设置列的标题、显示格式、数据类型等属性。
四、绑定数据表格1. 在Object Inspector窗口中找到"Columns"属性,点击右侧的"..."按钮。
2. 在弹出的对话框中点击"Add"按钮,选择需要绑定的字段,点击"OK"按钮。
3.重复上述步骤,为需要绑定的字段添加相应的列。
4. 在"Options"属性中设置表格的显示方式,比如显示水平滚动条、显示垂直滚动条等。
五、增加数据行1.在窗体或数据模块上添加一个按钮控件。
3.在事件代码中使用以下方法向数据表格中增加数据行:MyDataSet.Insert;MyDataSet.FieldByName('字段1').AsString := '值1';MyDataSet.FieldByName('字段2').AsInteger := 值2;MyDataSet.Post;七、删除数据行1.在窗体或数据模块上添加一个按钮控件。
文章标题:深度探讨Devexpress VCL的应用与示例一、引言Devexpress VCL是一个功能强大而且灵活的可视化控件库,它为开发人员提供了丰富的界面设计和功能实现工具。
在本文中,我们将重点探讨Devexpress VCL的应用与示例,并通过深度分析和实例展示,帮助读者更好地理解和运用这一技术。
二、Devexpress VCL的基本概念1. Devexpress VCL是什么?Devexpress VCL是一个面向Windows评台的控件库,它提供了丰富多样的界面控件,包括但不限于按钮、列表框、网格、编辑框等,同时还提供了一系列的数据处理、图表绘制、文档处理等功能模块。
开发人员可以利用这些控件和功能模块,快速、高效地构建出精美而且功能丰富的Windows应用程序。
2. Devexpress VCL的特点- 可视化设计器:Devexpress VCL提供了强大的可视化设计器工具,开发人员可以通过拖拽控件、设置属性等方式,轻松设计界面布局。
- 丰富的控件库:Devexpress VCL包含了大量常用的界面控件,这些控件不仅外观漂亮,而且功能强大。
- 功能模块完善:除了界面控件外,Devexpress VCL还提供了许多功能模块,如数据处理、报表生成、文件操作等,为开发人员提供了全方位的工具支持。
三、Devexpress VCL的实际应用1. 基本示例:按钮控件我们通过一个简单的示例来展示Devexpress VCL的应用。
我们创建一个按钮控件,并设置其文字内容为“点击我”,然后在点击按钮时弹出一个消息框,显示“Hello, Devexpress VCL!”。
这个示例展示了如何在Devexpress VCL中创建界面控件,并设置基本的交互逻辑。
2. 进阶示例:图表绘制接下来,我们介绍一个进阶的示例,使用Devexpress VCL中的图表控件来展示数据。
我们准备了一组柱状图数据,并利用Devexpress VCL的图表控件,将这些数据可视化为一个柱状图。
DevExpress控件使⽤⽅法:第⼀篇gridControl详解GridControl(1)层次设计器有五种视图模式,banded gridview多⾏表头,数据还是⼀⾏⼀组,最靠近数据的表头与数据⼀⼀对应;advanced banded gridview多⾏表头,数据可以多⾏⼀组;cardview ⼀个卡⽚是⼀组数据,其中左侧是标题,右侧是数据;layout view是card view的集合,布局可以⾃定义(2)视图视图的层次结构视图属性:可通过GridControl.Views访问所有视图。
可通过ColumnView.Columns访问当前视图的所有列(3)设计器(层次设计器中点击Run Designer可调出)设计器有四⼤功能:①主要功能的设计;②选择外观;③可以选择多个视图,内嵌编辑器的设置;④打印功能的设置① View:(a)Option:OptionsBehavior可以设置⾏为(是否允许新增⾏/是否允许删除⾏/是否允许编辑/是否允许展开所有分组)OptionsCustomization(是否允许排序/分组/过滤/列的移动/列的⼤⼩的调整)OptionsDetail(设置从表的属性)、OptionsFilter(过滤属性的设置)OptionsView(显⽰或隐藏某些东西,⽐如标题⾏)(b)AppearancePrint : (⾏⾼…)Columns://列的相应的属性FeatureBrowser://设置事件,Grid的绑定、列的绑定(有⽅法提⽰),什么都可以设置Layout:设置布局Group Summary Items添加分组统计② Appearance:Appearances可设置⾏的外观Format Conditions条件样式Style Schemes可设置主题(⽐较⽅便)③ RepositoryView Repository设计视图,与①差不多In-place Editor Repository内嵌编辑器④ Printing(4)gridControl:给该列添加组件(如按钮) 三种⽅法法⼀:打开设计器(Run Designer),选择左侧Repository,点击In-place Editor Repository(内嵌编辑器),点击Add右侧的下拉菜单,选择你想添加的控件,⽐如ComboBoxEdit,再在右侧编辑控件的属性,ComboBox的话就可以设置Data下的Items集合,然后点左侧Main⾥的Columns,点你想在上头添加控件的列,找右侧Data下的ColumnEdit,点最右边的下拉菜单,点Existing左侧的加号,就能找到你刚才的控件,添加。
DevExpress用法总结大全使用DevExpress控件来做项目开发已经有很长一段时间了,在摸索开发到客户苛刻要求的过程中,其中碰到过很多问题需要解决的,随着一个个问题的解决,也留下很多对DevExpress控件的使用经验及教训,综合设计到的多个项目的问题,对这些开发常用的要点进行总结,方便别人也方便自己。
提供这些解决方法,一个可以快速应用到项目中,二个也可以作为对界面开发的更高要求对待自己的项目,使得自己的东西更加完美,更加受欢迎。
1、 GridControl控件的数据显示的样式控制DevExpress控件开发常用要点总结如上两图所示,我们有时候需要控制列表访问过的颜色变化,或者是时间显示格式等内容,这个时候设置GridView的RowCellStyle即可实现,如下所示。
this.gridView1.RowCellStyle += new DevExpress.XtraGrid.Views.Grid.RowCellStyleEventHandler(gridView1_RowCellStyle);void gridView1_RowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e){if (e.Column.FieldName == "PublishType"){if (e.CellValue != null && e.CellValue.ToString() == "中介"){e.Appearance.BackColor = Color.DeepSkyBlue;e.Appearance.BackColor2 = Color.LightCyan;}}if (e.Column.FieldName == "PublishTime"){e.Column.DisplayFormat.FormatString = "yyyy-MM-dd HH:mm:ss";}if (e.Column.FieldName == "Title"){string id = this.winGridViewPager1.gridView1.GetRowCellDisplayText(e.RowHandle, "Id");if (historyDict.ContainsKey(id)){e.Appearance.BackColor = Color.DeepSkyBlue;e.Appearance.BackColor2 = Color.LightCyan;}}}2、在LayoutControl布局中固定控件宽度DevExpress控件开发常用要点总结固定宽度后的真实效果。
DevExpress使用技巧一、DevExpress控件使用使用技巧小结零零散散的先总结一下吧1.TextEditor(barEditItem)取文本string editValue = barEditItem1.EditValue.ToString(); //错误,返回nullstring editValue =((DevExpress.XtraEditors.TextEdit)barEditItem).EditValue.ToString(); //正确,返回文本框内容boBoxEdit(barEditItem)添加Itemstring item = "comboboxItem1";((DevExpress.XtraEditors.Repository.RepositoryItemComboBox)this.barE ditItem.Edit).Items.Add(item);boBoxEdit(barEditItem)取文本string itemValue = this.barEditItem.EditValue.ToString();4.Ribbon控件//添加PageDevExpress.XtraBars.Ribbon.RibbonPage ribbonPage = new RibbonPage();ribbonControl.Pages.Add(ribbonPage); //添加GroupDevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup = new RibbonPageGroup();ribbonPage.Groups.Add(ribbonPageGroup); //添加ButtonDevExpress.XtraBars.BarButtonItem barButtonItem = newBarButtonItem();ribbonPageGroup.ItemLinks.Add(barButtonItem); //添加barSubItemDevExpress.XtraBars.BarSubItem barSubItem = new BarSubItem();ribbonPageGroup.ItemLinks.Add(barSubItem); //barSubItem下添加Button barSubItem.AddItem(barButtonItem);4.奇怪的删除Page问题while (this.ribbonControl.Pages.Count > 0) {ribbonControl.Pages.Remove(ribbonControl.Pages[0]); //调试正常,运行报异常}while (this.ribbonControl.Pages.Count > 0) {ribbonControl.SelectedPage = ribbonControl.Pages[0];ribbonControl.Pages.Remove(ribbonControl.SelectedPage); //运行正常}5.RIBBON问题汇集//禁止F10键TipseF10KeyForMenu = false; //DX按钮ApplicationIcon属性改变图标右键 Add ApplicationMenu 添加evExpress.XtraBars.Ribbon.ApplicationMenu5.HitInfo //在Tab页上点击右键的事件响应void xtraTabbedMdiManager_Event(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right & ActiveMdiChild != null){DevExpress.XtraTab.ViewInfo.BaseTabHitInfo hInfo = xtraTabbedMdiManager.CalcHitInfo(e.Location);//右键点击位置:在Page上且不在关闭按钮内if (hInfo.IsValid & hInfo.Page != null && !hInfo.InPageCloseButton) {this.popupMenu.ShowPopup(Control.MousePosition);//在鼠标位置弹出,而不是e.Location}}}//在ribbon上点击右键的事件响应private void ribbonControl1_ShowCustomizationMenu(object sender, RibbonCustomizationMenuEventArgs e){//禁掉原系统右键菜单e.ShowCustomizationMenu = false;//右键位置:在barButtonItem上if (e.HitInfo != null& e.HitInfo.InItem& e.HitInfo.Item.Item is BarButtonItem){this.popupMenu.ShowPopup(Control.MousePosition);}//右键位置:在barSubItem中的barButtonItem上else if (e.Link != null& e.Link.Item != null& e.Link.Item is BarButtonItem){this.popupMenu.ShowPopup(Control.MousePosition);}}6.皮肤//添加皮肤程序集后注册皮肤erSkins.OfficeSkins.Register();erSkins.BonusSkins.Register();//设置皮肤erLookAndFeel.Default.SetSkinStyle("Liquid Sky"); //若皮肤名称错误则按系统默认设置(第一个皮肤)//GalleryFilterMenuPopup事件设置弹出筛选菜单的“All Groups”为中文private void rgbiSkins_GalleryFilterMenuPopup(object sender, GalleryFilterMenuEventArgs e){e.FilterMenu.ItemLinks[n].Caption = "所有皮肤"; //n=分组数+1}//GalleryInitDropDownGallery事件设置弹出皮肤列表的表头“ALL Groups”为中文private void rgbiSkins_GalleryInitDropDownGallery(object sender, InplaceGalleryEventArgs e){e.PopupGallery.FilterCaption = "所有皮肤";}7.dockManager将视图的状态信息保存到xml文件dockManager1.SaveLayoutToXml("..\\UserConfig\\ViewInfo.xml"); 导出xml中保存的状态信息dockManager1.RestoreLayoutFromXml("..\\UserConfig\\ViewInfo.xml");8. barManager 设置bar的字体与系统字体barAndDockingController1.AppearancesBar.ItemsFont = newFont(this.Font.FontFamily, currentFontSize);9.设置系统字体DevExpress.Utils.AppearanceObject.DefaultFont = newFont(this.Font.FontFamily, currentFontSize);10.treeView 为tree节点加右键菜单并选中该节点private void treeList1_MouseDown(object sender, MouseEventArgs e) {if (e.Button == MouseButtons.Right){DevExpress.XtraTreeList.TreeListHitInfo hi =treeList1.CalcHitInfo(e.Location);if (hi.Node != null & hi.Node.ImageIndex == 5) //叶子节点的ImageIndex == 5{TreeListNode node = treeList1.FindNodeByID(hi.Node.Id);treeList1.FocusedNode = node;this.popupMenu1.ShowPopup(MousePosition);}}}二、DevExpress部分使用技巧(原创) 作者 : 轻舞肥羊标题 : DevExpress部分使用技巧(原创)关键字: DevExpress,cxGrid分类 : 开发技巧密级 : 公开(评分:???? , 回复: 7, 阅读: 8588) »»本文由轻舞肥羊发表于大富翁论坛转载请标明出处,谢谢声明:以下代码请看懂再使用,本人水平有限,发现bug希望提出,让我们共同改进2004-1-10 17:06:00查看评语»»»1.扩展cxLookupComboBox,使其支持多列查询的cxLookupComboBoxEx日期:2004-1-10 17:08:06//================================================================== ============// Unit Name: cxLookupComboBoxEx // Author : ysai// Date : 2003// Purpose : 扩展cxLookupComboBox,cxDBLookupComboBox,使其支持多列过滤 // History :// 2003-05-28大数据量改进// 2003-07-07可操作性改进// 2003-08-20效率改进// 2003-08-29加入过滤延时// 注意:// 限制1,不能再使用Properties.OnChange事件// 限制2,不能再使用Properties.ListSource.DataSet.OnFilterRecord事件// 限制3,不能再使用Properties.ListSource.DataSet.Filtered属性 // 其它,最好在设计期设好一切属性,运行期再设置属性可能引发求知错误//===================================================================== =========unit cxLookupComboBoxEx;interfaceusesSysUtils, Classes, Controls, Windows, Messages,DB,StrUtils,cxControls, cxContainer, cxEdit, cxTextEdit,cxMaskEdit, cxDropDownEdit, cxLookupEdit, cxDBLookupEdit,cxDBLookupComboBox;typeTcxLookupComboBoxEx = class(TcxLookupComboBox)private//保存要过滤的字段列表FFieldList : TList;FFindText : String;//过滤事件procedure _OnFilterRecord(DataSet: TDataSet; var Accept: Boolean); //编辑框文字改变事件procedure _OnChange(Sender : TObject);procedure GetFieldList;//延时过滤消息procedure WMTimer (var Message: TMessage); message WM_TIMER; protected//下拉表格收回时procedure CloseUp(AAccept: Boolean); override;//过滤过程procedure _FilterListSource;//初始化下拉表格事件procedure DoInitPopup; override;publicconstructor Create(AOwner : TComponent); override;destructor Destroy; override;//更新要过滤的字段列表procedure UpdateFilterFields;publishedend;TcxDBLookupComboBoxEx = class(TcxDBLookupComboBox)private//保存要过滤的字段列表FFieldList : TList;FFindText : String;//过滤事件procedure _OnFilterRecord(DataSet: TDataSet; var Accept: Boolean); //编辑框文字改变事件procedure _OnChange(Sender : TObject);//取得要过滤的字段列表procedure GetFieldList;//延时过滤消息procedure WMTimer (var Message: TMessage); message WM_TIMER; protected//下拉表格收回时procedure CloseUp(AAccept: Boolean); override;//过滤过程procedure _FilterListSource;//初始化下拉表格事件procedure DoInitPopup; override;publicconstructor Create(AOwner : TComponent); override;destructor Destroy; override;//更新要过滤的字段列表procedure UpdateFilterFields;publishedend;procedure Register;implementationconstUM_TIMER_FILTER = WM_USER + $101; //自定义延时消息IDFILTERTIMER = 500; //延时时间DROPDOWN_ROWS = 12;procedure Register;beginRegisterComponents('Dev Express', [TcxLookupComboBoxEx,TcxDBLookupComboBoxEx]);end;{ TcxLookupComboBoxEx }procedure TcxLookupComboBoxEx.CloseUp(AAccept: Boolean);begininherited;//收起下拉后取消过滤if Assigned(Properties.ListSource) thenif Assigned(Properties.ListSource.DataSet) thenProperties.ListSource.DataSet.Filtered := False; end;constructor TcxLookupComboBoxEx.Create(AOwner: TComponent); begin inherited;//默认值Properties.AutoSelect := False;Properties.DropDownAutoSize := True;Properties.DropDownListStyle := lsEditList;Properties.DropDownRows := DROPDOWN_ROWS;Properties.DropDownSizeable := True;Properties.IncrementalFiltering := False;Properties.Revertable := True;Properties.OnChange := _OnChange;eLeftAlignmentOnEditing := False; end;destructor TcxLookupComboBoxEx.Destroy;begin//释放过滤字段列表if Assigned(FFieldList) then FFieldList.Free;inherited;end;procedure TcxLookupComboBoxEx.DoInitPopup; begin//取得过滤字段if Assigned(Properties.ListSource) thenif Assigned(Properties.ListSource.DataSet) thenbeginGetFieldList;Properties.ListSource.DataSet.Filtered := False;end;inherited DoInitPopup;end;procedure TcxLookupComboBoxEx._FilterListSource; //过滤字段beginif Assigned(Properties.ListSource)and Assigned(Properties.ListSource.DataSet) thentryProperties.ListSource.DataSet.DisableControls;Properties.ListSource.DataSet.Filtered := False;Properties.ListSource.DataSet.OnFilterRecord := _OnFilterRecord; if Text <> '' thenbeginFFindText := Text;if SelLength > 0 thenFFindText := LeftStr(Text,SelStart);Properties.ListSource.DataSet.Filtered := FFindText <> '';end;Changed;finallyProperties.ListSource.DataSet.EnableControls;end;end;procedure TcxLookupComboBoxEx.GetFieldList; //取得过滤字段列表vari : Integer;sFieldName : String;fdTemp : TField;beginif not Assigned(FFieldList) thenbeginFFieldList := TList.Create;for i:=0 to Properties.ListColumns.Count -1 dobeginsFieldName := Properties.ListColumns.Items[i].FieldName;if sFieldName = '' then Continue;fdTemp := Properties.ListSource.DataSet.FindField(sFieldName);if Assigned(fdTemp) thenFFieldList.Add(Pointer(fdTemp));end;end;end;procedure TcxLookupComboBoxEx._OnChange(Sender: TObject); //设置延时beginif Focused and DroppedDown thenbeginKillTimer(Handle,UM_TIMER_FILTER);SetTimer(Handle,UM_TIMER_FILTER,FILTERTIMER,nil);end;end;procedure TcxLookupComboBoxEx._OnFilterRecord(DataSet: TDataSet; var Accept: Boolean);//过滤事件vars : String;i : Integer;begins := LowerCase(FFindText);if (s <> '') and (Properties.ListColumns.Count > 0) thenbeginAccept := False;for i := 0 to FFieldList.Count -1 dobeginAccept := Pos(s,LowerCase(TField(FFieldList[i]).AsString))>0;if Accept then Exit;end;endelseAccept := True;end;procedure TcxLookupComboBoxEx.WMTimer(var Message: TMessage);//延时更新消息beginKillTimer(Handle,UM_TIMER_FILTER);if Focused and DroppedDown then _FilterListSource; end;procedure TcxLookupComboBoxEx.UpdateFilterFields; //更新要过滤的字段列表beginif Assigned(FFieldList) thenbeginFFieldList.Free;FFieldList := nil;end;GetFieldList;end;{ TcxDBLookupComboBoxEx }procedure TcxDBLookupComboBoxEx.CloseUp(AAccept: Boolean); begin inherited;//收起下拉后取消过滤if Assigned(Properties.ListSource) thenif Assigned(Properties.ListSource.DataSet) thenProperties.ListSource.DataSet.Filtered := False; end;constructor TcxDBLookupComboBoxEx.Create(AOwner: TComponent); begininherited;//默认值Properties.AutoSelect := False;Properties.DropDownListStyle := lsEditList; Properties.DropDownRows := DROPDOWN_ROWS; Properties.DropDownSizeable := True;Properties.IncrementalFiltering := False; Properties.Revertable := True;Properties.OnChange := _OnChange;eLeftAlignmentOnEditing := False; end; destructor TcxDBLookupComboBoxEx.Destroy;begin//释放过滤字段列表if Assigned(FFieldList) then FFieldList.Free; inherited;end;procedure TcxDBLookupComboBoxEx.DoInitPopup; begin //取得过滤字段if Assigned(Properties.ListSource) thenif Assigned(Properties.ListSource.DataSet) then beginGetFieldList;Properties.ListSource.DataSet.Filtered := False; end;inherited DoInitPopup;end;procedure TcxDBLookupComboBoxEx._FilterListSource; //过滤字段beginif Assigned(Properties.ListSource)and Assigned(Properties.ListSource.DataSet) thentryProperties.ListSource.DataSet.DisableControls;Properties.ListSource.DataSet.Filtered := False;Properties.ListSource.DataSet.OnFilterRecord := _OnFilterRecord; if Text <> '' thenbeginFFindText := Text;if SelLength > 0 thenFFindText := LeftStr(Text,SelStart);Properties.ListSource.DataSet.Filtered := FFindText <> '';end;Changed;finallyProperties.ListSource.DataSet.EnableControls;end;end;procedure TcxDBLookupComboBoxEx.GetFieldList; //取得过滤字段列表vari : Integer;sFieldName : String;fdTemp : TField;beginif not Assigned(FFieldList) thenbeginFFieldList := TList.Create;for i:=0 to Properties.ListColumns.Count -1 dobeginsFieldName := Properties.ListColumns.Items[i].FieldName;if sFieldName = '' then Continue;fdTemp := Properties.ListSource.DataSet.FindField(sFieldName);if Assigned(fdTemp) thenFFieldList.Add(Pointer(fdTemp));end;end;end;procedure TcxDBLookupComboBoxEx._OnChange(Sender: TObject); //设置延时beginif Focused and DroppedDown thenbeginKillTimer(Handle,UM_TIMER_FILTER);SetTimer(Handle,UM_TIMER_FILTER,FILTERTIMER,nil);end;end;procedure TcxDBLookupComboBoxEx._OnFilterRecord(DataSet: TDataSet; var Accept: Boolean);//过滤事件vars : String;i : Integer;begins := LowerCase(FFindText);if (s <> '') and (Properties.ListColumns.Count > 0) thenbeginAccept := False;for i := 0 to FFieldList.Count -1 dobeginAccept := Pos(s,LowerCase(TField(FFieldList[i]).AsString))>0;if Accept then Exit;end;endelseAccept := True;end;procedure TcxDBLookupComboBoxEx.WMTimer(var Message: TMessage);//延时更新消息beginKillTimer(Handle,UM_TIMER_FILTER);if Focused and DroppedDown then _FilterListSource; end;procedure TcxDBLookupComboBoxEx.UpdateFilterFields; //更新要过滤的字段列表beginif Assigned(FFieldList) thenbeginFFieldList.Free;FFieldList := nil;end;GetFieldList;end;end.2.动态生成TcxGridDBTableView的列及页脚的合计栏日期: 2004-1-10 17:14:06vari : Integer;cl : TcxGridDBColumn;beginScreen.Cursor := crHourGlass;cxtvMaster.BeginUpdate;trycxtvMaster.ClearItems;cxtvMaster.DataController.Summary.FooterSummaryItems.Clear;for i := 0 to cxtvMaster.DataController.DataSet.FieldCount - 1 do begincl := cxtvMaster.CreateColumn;cl.DataBinding.FieldName :=cxtvMaster.DataController.DataSet.Fields[i].FieldName;if cxtvMaster.DataController.DataSet.Fields[i] is TNumericField then beginTNumericField(cxtvMaster.DataController.DataSet.Fields[i]).DisplayFormat := '#,##0.00';cl.Width := 80;with TcxGridDBTableSummaryItem(cxtvMaster.DataController.Summary.FooterSummaryItems.Add) dobeginColumn := cl;FieldName := cl.DataBinding.FieldName;Format := '#,##0.00';Kind := skSum;end;endelse if cxtvMaster.DataController.DataSet.Fields[i] is TStringField thencl.Width := 100elsecl.Width := 80;cl.HeaderAlignmentHorz := taCenter;end; //iffinallycxtvMaster.EndUpdate;Screen.Cursor := crDefault;end;end;3.动态生成TcxGridDBBandedTableView的列及页脚的合计栏日期: 2004-1-10 17:24:32如果存储过程或SQL返回如下结果集员工 1月$ 1月, 2月$ 2月, 合计$ 合计,------------------------------------------- 测试员A 200 1658 300 2487 500 4145将生成如下样式的Grid(页脚没有画出,麻烦,另外设置了显示格式,金额将以#,##0.00的方式显示)_________________________________________________ | 员工 | 1月 | 2月 | 合计 ||-----------------------------------------------| | 员工 | , | , | , | , | , | , ||-----------------------------------------------| |测试员A | 200 | 1658 | 300 | 2487 | 500 | 4145 | -------------------------------------------------vari : Integer;cl : TcxGridDBBandedColumn;beginScreen.Cursor := crHourGlass;cxbtvMaster.BeginUpdate;trycxbtvMaster.ClearItems;cxbtvMaster.Bands.Clear;cxbtvMaster.DataController.Summary.FooterSummaryItems.Clear;for i := 0 to cxbtvMaster.DataController.DataSet.FieldCount - 1 do beginif i = 0 thenwith cxbtvMaster.Bands.Add dobeginOptions.HoldOwnColumnsOnly := True;Caption := cxbtvMaster.DataController.DataSet.Fields[i].FieldName; end;if RightStr(cxbtvMaster.DataController.DataSet.Fields[i].FieldName,1) = '$' thenwith cxbtvMaster.Bands.Add dobeginOptions.HoldOwnColumnsOnly := True;Caption := Copy(cxbtvMaster.DataController.DataSet.Fields[i].FieldName, 1,Length(cxbtvMaster.DataController.DataSet.Fields[i].FieldName) - 1);cxbtvMaster.DataController.DataSet.Fields[i].DisplayLabel := ',';end;if RightStr(cxbtvMaster.DataController.DataSet.Fields[i].FieldName,1) = ',' thencxbtvMaster.DataController.DataSet.Fields[i].DisplayLabel := ',';cl := cxbtvMaster.CreateColumn;cl.HeaderAlignmentHorz := taCenter;cl.Position.BandIndex := cxbtvMaster.Bands.Count - 1;cl.DataBinding.FieldName :=cxbtvMaster.DataController.DataSet.Fields[i].FieldName;if cxbtvMaster.DataController.DataSet.Fields[i] is TNumericField thenbeginTNumericField(cxbtvMaster.DataController.DataSet.Fields[i]).DisplayFormat := '#,##0.00';cl.Width := 80;with TcxGridDBBandedTableSummaryItem(cxbtvMaster.DataController.Summary.FooterSummaryItems.Add) dobeginColumn := cl;FieldName := cl.DataBinding.FieldName;Format := '#,##0.00';Kind := skSum;end;endelse if cxbtvMaster.DataController.DataSet.Fields[i] is TStringField thencl.Width := 100elsecl.Width := 80;end; //iffinallycxbtvMaster.EndUpdate;Screen.Cursor := crDefault;end;end;4.自动调整列宽的方法要注意的地方2004-1-31 22:36:25可以用ApplyBestFit实现自动列宽;不能在BeginUpdate和EndUpdate之间调用这个方法,否则会产生下标越界错误; 在BeginUpdate和EndUpdate中清除/建立列不会产生屏幕闪烁,其它需要长时间更新cxGrid数据的操作最好放在BeginUpdate和EndUpdate执行,并用try包起来.5.DevExpress Bar的动态菜单2004-2-8 15:32:30没有什么说明,细心点应该知道表结构及数据的内容形式对比了一下代码,用dxBar比用ToolBar+PopupMenu生成动态菜单要简单,只用了一个递归过程type//菜单项PMenuItemInfo = ^TMenuItemInfo;TMenuItemInfo = recordID : string;ParentID : string;Caption : string;Hint : string;LibraryName : string;ProcedureName : string;wParam : Integer;lParam : Integer;end;procedure TmgMainForm.BuildMenu; //生成菜单procedure SetMenuItemInfo(const ADataSet : TDataSet;const AItem : PMenuItemInfo);beginAItem.ID := ADataSet.FieldByName('ID').AsString;AItem.ParentID := ADataSet.FieldByName('ParentID').AsString;AItem.Caption := ADataSet.FieldByName('Caption').AsString;AItem.Hint := ADataSet.FieldByName('Hint').AsString;AItem.LibraryName := ADataSet.FieldByName('LibraryName').AsString;AItem.ProcedureName :=ADataSet.FieldByName('ProcedureName').AsString;AItem.wParam := ADataSet.FieldByName('wParam').AsInteger;AItem.lParam := ADataSet.FieldByName('lParam').AsInteger;end;procedure CreateItemList(const ADataSet : TDataSet;const AList : TList;const AText : string);//根据父节点建立子项目列表varm : PMenuItemInfo;i : Integer;beginADataSet.First;for i := 0 to ADataSet.RecordCount - 1 dobeginif ADataSet.FieldByName('ParentID').AsString = AText thenbeginNew(m);SetMenuItemInfo(ADataSet,m); AList.Add(m);ADataSet.Delete;end elseADataSet.Next;end; //forend;procedure CreateMenuItems(const ADataSet : TDataSet;const AKeyValue : string;const AItemLinks : TdxBarItemLinks; const AIndex : Integer);//建立菜单项vardb : TdxBarButton;dbs : TdxBarSubItem;l : TList;i : Integer;j : Integer;bg : Boolean;beginbg := False;j := AIndex;l := TList.Create;tryCreateItemList(ADataSet, l, AKeyValue);for i := 0 to l.Count - 1 dobeginif ADataSet.Locate('ParentID', PMenuItemInfo(l[i]).ID, []) then begin//有子项dbs := TdxBarSubItem.Create(dxBar);dbs.Caption := PMenuItemInfo(l[i]).Caption;dbs.Hint := PMenuItemInfo(l[i]).Hint;dbs.Tag := Integer(l[i]);if AIndex > 0 thendbs.ImageIndex := 0;with AItemLinks.Add dobeginItem := dbs;Index := j;BeginGroup := bg;end; //withbg := False;CreateMenuItems(ADataSet, PMenuItemInfo(l[i]).ID, dbs.ItemLinks, 0); if dbs.ItemLinks.Count = 0 thendbs.FreeelseInc(j);endelse begin//无子项if not (PMenuItemInfo(l[i]).Caption = '-') then begindb := TdxBarButton.Create(dxBar);db.Caption := PMenuItemInfo(l[i]).Caption;db.Hint := PMenuItemInfo(l[i]).Hint;db.Tag := Integer(l[i]);db.OnClick := MenuItemClick;if AIndex > 0 thendb.ImageIndex := 0;with AItemLinks.Add dobeginItem := db;Index := j;BeginGroup := bg;end;bg := False;Inc(j);endelse beginbg := True;end; //if bgend; //if Locateend; //forfinallyl.Free;end;end;varrsMenus : TDataSet;beginrsMenus := mgDMMain.GetMenus; //取得数据集if Assigned(rsMenus) thentryCreateMenuItems(rsMenus, '', dxBar.Bars[0].ItemLinks, 1); //一定要刷新一下,否则不更改样式会出错dxBar.Bars[0].ItemLinks[0].Visible := False;dxBar.Bars[0].ItemLinks[0].Visible := True;finallyrsMenus.Free;end;end;6. 取得TcxLookupComboBox下拉列表中各项的内容日期: 2005-1-416:34:35Properties.DataController.Values包含了所有内容,如果要取得当前选择行的内容,用以下代码 //cmb:TcxLookupComboBox;with cmb.Properties.DataController doShowMessage(Values[FindRecordIndexByKey(cmb.EditValue),0]);//0代表显示的第一列,以Properties.ListColumns为准,可以从这个集合中查找对应的字段名三、。
文章标题:探索Devexpress中的单元格四则运算功能在现代软件开发中,数据表格是一种常见的数据展示方式。
而在使用Devexpress控件时,单元格四则运算功能为我们提供了一种便捷的数据计算方式。
本文将深入探讨Devexpress中的单元格四则运算功能,以及如何在实际开发中应用该功能。
一、Devexpress 控件简介Devexpress是一家软件开发公司,提供多种用于Windows应用程序开发的控件和工具。
其中包括数据表格控件,该控件在数据展示和管理方面具有非常强大的功能。
在实际应用开发中,我们可以使用Devexpress控件轻松地展示和管理大量数据。
二、单元格四则运算的概念单元格四则运算是指在数据表格中,对单元格中的数据进行加、减、乘、除等运算操作。
这种功能在实际应用中非常常见,能够为用户提供便捷的数据计算和分析方式。
在Devexpress控件中,我们可以通过简单的配置即可实现单元格四则运算功能,为用户提供更加丰富的数据展示和分析能力。
三、在Devexpress 中实现单元格四则运算的步骤1. 配置单元格类型在使用Devexpress控件时,可以通过设置单元格的类型来实现单元格四则运算功能。
有些单元格类型默认支持四则运算,有些则需要通过特定的配置来启用该功能。
2. 设定计算规则在配置单元格类型后,我们需要设定该单元格的计算规则,包括参与计算的字段、运算符和显示格式等。
3. 编写计算规则代码如果需要更加复杂的计算逻辑,可以通过编写代码来实现。
Devexpress控件提供了丰富的API,可以方便地实现各种计算逻辑。
四、实例分析:在实际开发中如何应用单元格四则运算以一个销售报表为例,假设我们需要计算每个销售员的销售额和销售提成。
我们可以通过Devexpress控件中的单元格四则运算功能,轻松实现该功能。
我们需要配置销售额和提成字段的单元格类型为数值型;然后设定计算规则,计算提成=销售额*提成比例;通过编写代码来实现计算逻辑。
TCXGRI D控件:属性:Active Level: 当前层Border Style: 窗口风格Color:颜色Focuse dView: 当前View;Font: 字体LevelT abs: 类似Page Contr ols头设置Captio n Algn m ent:标题对齐方式Images:图标Style:风格Levels:RootLev elOptions:层选项Detail TabsP ositi on: 类似Page Contr ols头显示位置;TabsFo rEmptyDeta i ls: 如果数据为空是否显示T a bsTcxGri dLeve l组件:属性:Active:读写激活该层;Contro ls: 读写指向TCXGrid;CanBeV isibl e: 读取是否能设置可见;Count:读取子层个数;Displa ycapti on: 读取层标题;IsMast er: 读取是否cx g rid的最上层;Items:读取层组,例: Items[0]访问第一个层;Level:读取层级数;Visibl eCoun t: 读取可见层个数Visibl eIndex: 读取可见索引个数Visibl eItem s: 读取可见层组,例:Visibl eItem s[0]访问第一个可见层Captio n: 读写层标题;GridVi ew: 指定或读取该层的Gri d显示;ImageIn dex:读写图标索引Option s: TcxGri dLevel Opti ons选项Detail Frame Color:读或写明细表格颜色Detail FramW i dth:读或写明细表格Detail TabsP ositi on: 读或写Tab位置,类似Page Contr olsTa bs Styles:样式Tab: 读或设置ta b样式tabsBa ckgro u nd: 读或设置ta b背景样式Visibl e: 读或设置是否可见方法:Add: 增加一个Lev el;Levels[i].Add:增加一个子L ev el;TcxGri dDBBa ndedT ableV iew组件:属性:BackGr oundBi tmap s:背景图片选项Backgr ound:背景图Bandba ckgro und:带背景图Bankhe ader:带头背景Conten t:细节区背景filterBox:过滤区背景footer:注脚背景group:组背景header:列头背景previe w:预览区背景Bands:带列表DataCon troller: 数据控制DataSource:数据源Detail KeyFi eldNam es:主从表时设置细表键字段名KeyFie l dNam es: 主从表时设置关键字段名Master KeyFi eldNa m es:主从表时设置主表键字段名Summary:合计组Footer Summa ryIte m s:注脚定义Footer Summa ryIte m s:组脚定义Filter Box:过滤框Custom izeDi alog:是否自定义过滤条件Positi on:过滤框显示位置Visibl e:显示过滤框NavigatorBu ttons:导航条设置Append:增加按钮设置Enable d:是否禁用该按钮Visibl e:是否显示该按钮ImageIn dex:图标IDCancel:取消按钮设置,具体设置同A p pend;Confir mDele te:删除时是否确认提示Delete:具体设置同A p pend;Edit: 具体设置同A p pend;First:具体设置同A p pend;Insert:具体设置同A p pend;Last: 具体设置同A p pend;Next: 具体设置同A p pend;Filter:具体设置同A p pend;GotoBo okmar k: 具体设置同A p pend;NextPag e: 具体设置同A p pend;Post: 具体设置同A p pend;Prior:具体设置同A p pend;PriorPage: 具体设置同A p pend;Refresh: 具体设置同A p pend;SaveBo okmar k: 具体设置同A p pend;Option sBehavior:行为选项Always ShowE ditor:是否总是显示编辑条BandHe aderH i nts:带头是否显示提示CellHi nts:单元格是否显示提示Column Heade rHints:列头是否显示提示CopyCa ption sToCl ipboa rd:是否允许复制标题到剪贴板CopyPr eviewT oCli pboar d:是否允许复制预览内容到剪贴板Expand Maste rRowOnDblCl ik:是否允许双击行显示明细FocusFi rstC ellOn NewRe cord:新增记录时是否焦点指向第一列单元格GoToNex tCel lOnEn ter:按回车是否自动跳到下一单元格NavigatorHi nts:是否显示导航条提示Option sCust omize:自定义选项BandHi ding:是否显示带BandMoving:是否允许拖动带Column Filte ring:是否允许列过滤Column Group ing:是否允许列分组Column Hidin g:列头是否隐藏Column HorzSizing:是否允许调整列宽度Column Movin g:是否允许列拖动Column Sorti ng:是否允许列排序Column V ertSi zing:是否允许调整列高度DataRowSizi ng:是否允许调整数据行高度GroupBy Sorting:是否允许组排序GroupR owSiz i ng:是否允许调整组行高度Option Data:允许数据操作Appending: 是否允许增加Cancel O nExi t: 退出时是否自动取消修改Deleti ng: 是否允许删除Deleti ngCon firma tion:删除是否提示Editin g :是否允许编辑Inserting: 是否允许插入Option sSele ction: 单元格操作CellMu ltiSelect:是否允许选择多单元格CellSel ect:进入单元格是否选择Invert Selec t: 是否允许转换选择MultiS elect:是否允许多行选择HideFo cusRe ctOnExit: 移开是否隐藏焦点Unsele ctFoc u sedR ecord OnExi t:移开是否允许取消焦点Option sView:表格选项BandCa ption sInColumnAltern ateCa ption:是否允许在列里修改带标题BandHe aderH eight:带头高度BandHe aderL ineCo unt: 带头显示行数BandHe aders:是否显示带头CellAu toHei ght:单元格是否自动高度CellTex tMax LineCount:单元格文本最大行数Column AutoW idth:列是否自动宽度DataRowHeig h t: 数据行高度Footer:是否允许显示注脚Footer AutoH eight:注脚是否自动适应高度Footer Multi S ummaries:是否允许多注脚GridLi neCol or:表格行线颜色GridLi nes:显示表格行线类型GroupBy Box:是否允许拖动列到分组区进行分组GroupFooter s:显示组脚类型Header:是否显示列头HeaderAutoH eight:列头是否自动适应高度HeaderHeigh t: 列头高度IndicatorWi dth:是否显示左边指示条IndicatorWi dth: 指示条宽度Navigator: 是否显示导航条NavigatorOf f Set:导航条偏移位置ShowColumnFilterButto n s: 是否显示列过滤按钮ShowEditButtons:是否显示编辑按钮Previe w:预览选项AutoHeight:是否自动适应高度Column:要预览的列,只能选一列LeftIn dent:左缩进点数MaxLin e Coun t:最大显示行数RightI n dent:右缩进点数Visibl e: 预览是否可见PopupM enu:弹出菜单Styles:样式或风格组BackGr ound:背景风格Conten t:明细风格Footer:注脚风格Group:组风格GroupSummary:组合计区风格Header:头风格Indicator:指示区风格Previe w:预览区风格Selection:选择区风格StyleSh eet:风格组,选中后自动设置各区风格方法或函数:Create Colum n:参数:无;功能:新建一列;返回:返回列类型结果;GetCol umnBy Field Name:参数:字段名串;功能:取得指定字段列;返回:返回列类型结果;例:MyTV.GetCol umnBy Field Name('First').Visibl e := False;Cleaar Items:参数:无;功能:清除全部显示列;返回:无Create Item:参数:无;功能:建一显示列;返回:列类型值StoreT oIniF ile:导出布局到I ni文件StoreT oRegi stry:导出布局到注册表StoreT oStre am:导出布局到流体Restor eFrom IniFi le: 从Ini文件恢复布局Restor eFrom Regis try:从注册表恢复布局Restor eFrom Strea m:从流体恢复布局FindIt emByI D:根据ID号查找列FindIt emByName:根据列名查找列FindIt emByT ag:根据Tag查找列Indexof Item:返回列的序号Create ViewInfo:建表格TCXGRI D用法指南假设已设定以下变量MycxGr id: TcxGri d;MycxGr idLev el: T cxGri dLeve l;MyTV: TcxGri dDBTa bleVi ew;MyData Sourc e: TDataS ource;方法:一、建层和层视图MycxGrid := TcxGri d.Create(self);MycxGridLev el := MycxGri d.Levels.Add; //建层MyTV:= TcxGri dDBTa bleVi ew(MycxGri d.create v iew(T cxGri dDBTa bleVi ew));//建视图MycxGridLev el.Contro l := MycxGri d;//指定关系MycxGridLev el.GridVi ew := MyTV;//指定视图TcxGri dData Contr oller(GetDet ailDa taCon troll er(Focuse dReco rdInd ex, 0)).GridVi ew;//得到下层视图二、设定表格位置和大小MycxGrid.Parent Windo w := self.Handle;MycxGrid.Top := 0;MycxGrid.Height := 200;MycxGrid.Width:= 400;MyTV.Previe w.visibl e := true;三、设定数据源及分配全部字段MyTV.DataControl ler.DataSou rce:= MyData Sourc e;MyTV.DataControl ler.Delete AllIt ems; //清除全部字段MyTV.DataControl ler.Create AllIt ems; //建全部显示字段四、动态增加显示列及列访问variIndex: intege r;vCol: TcxGri dDBCo lumn;vImgCo m: TcxIma geCom boBox Item;i,j: intege r;for i:= 0 to Mydata sourc e.datase t.FieldCount -1 dobeginvCol := MyTV.Create Colum n;vCol.DataBi nding.FieldN ame:=Mydata sourc e.datase t.Fields[i].FieldN ame;if (i = 1) thenbeginvCol.Proper tiesCl assName := 'TcxImag eCom boBox Prope rties'; ////分区分大小写vCol.DataBi nding.ValueT ype := 'String';for j := 0 to 5 dobeginvImgCo m:=TcxIma geCom boBox Prope rties(vCol.Proper ties).Items.Add;vImgCo m.Descri ption := IntToS tr(j);vImgCo m.Value:= IntToS tr(j);end;end;end;showmessage(MyTV.Column s[0].Captio n);//列标题访问showmessage(MyTV.Column s[0].DataBi nding.FieldName);//列字段名访问MyTV.Column s[0].SortIn dex := 0;MyTV.Column s[0].SortOr der := soAscen ding; //列升序排序MyTV.Column s[0].SortIn dex := -1;MyTV.Column s[0].SortOr der := soNone; //取消列排序MyTV.DataCo ntrol ler.Search.Locate(MyTV.GetCol umnBy Field Name(FieldN ame).Index,查找值);// 列值搜索MyTV.DataCo ntrol ler.Focuse dRowI ndex:= MyTV.DataCo ntrol ler.Focuse dRowI ndex- 1;//记录回翻,即Prior;DBView.DataCo ntrol ler.Focuse dRowI ndex:= DBView.DataCo ntrol ler.Focuse dRowI ndex+ 1; //记录后翻,即Next;Aa:=MyTV.datacontrol ler.values[1,1] ;// 访问第二行第二列的值MyTV.Column s[0].DataBi nding.V alueT y peCl ass := TcxStringValueTy pe;//设置列字段类型,其他如整型[T cxInt egerV alueT y pe],浮点型[TcxFlo atV al ueTyp e];//设置列风格:MyFirstColu mnSty le := TcxSty le.Create(Self);MyFirstColu mnSty le.Color:= clAqua;MyFirstColu mnSty le.TextCo lor := clBlue;MyTV.Column s[1].Styles.Conten t := MyFirstColu mnSty le;//设置列下拉框选择列表及类型varA:TDataS ource:B:Tcxloo kupco mbobo xProp ertie s;beginA:=TDataS ource.create(self);B:=tcxloo kupco mbobo xprop ertie s.create(self);A.Datase t:=Dic_ry_xb;//此处指定数据源。
Devpress.Xt属性说明OptionsOptionsBehaviorAllowAddRowsAllowDeleteRowsAllowIncrementalSearchAllowPartialRedrawOnScrollingAutoExpandAllGroupsAutoPopulateColumnsAutoSelectAllInEditorAutoUpdateTotalSummaryCacheValuesOnRowUpdatingCopyToClipboardWithColumnHeadersEditableEditorShowModeFocusLeaveOnTabImmediateUpdateRowPositionKeepFocusedRowOnUpdateKeepGroupExpandedOnSortingReadOnlySmartVertScrollBarSummariesIgnoreNullValuesOptionsCustomizationAllowColumnMovingAllowColumnResizingAllowFilterAllowGroupAllowQuickHideColumnsAllowRowSizingAllowSortOptionsDetailAllowExpandEmptyDetailsAllowOnlyOneMasterRowExpandedAllowZoomDetailsAutoZoomDetailEnableDetailToolTipEnableMasterViewModeShowDetailTabsSmartDetailExpandSmartDetailExpandButtonModeSmartDetailHeightOptionsFilterAllowColumnMRUFilterListAllowFilterEditorAllowMRUFilterListColumnFilterPopupMaxRecordsCountColumnFilterPopupRowCountDefaultFilterEditorView MRUColumnFilterListCount MRUFilterListCount MRUFilterListPopupCount ShowAllTableValuesInFilterPopup UseNewCustomFilterDialogOptionsFindAllowFindPanelAlwaysVisible ClearFindOnCloseFindDelayFindFilterColumnsFindModeHighlightFindResults ShowCloseButtonOptionsHintShowCellHints ShowColumnHeaderHints ShowFooterHintsOptionsLayoutColumnsAddNewColumns RemoveOldColumns StoreAllOptions StoreAppearanceStoreLayoutLayoutVersionsStoreAllOptions StoreAppearance StoreDataSettings StoreVisualOptionsOptionsMenu EnableColumnMenu EnableFooterMenu EnableGroupPanelMenu ShowAutoFilterRowItem ShowDateTimeGroupIntervalItems ShowGroupSortSummaryItems ShowGroupSummaryEditorItemsOptionsNavigation AutoFocusNewRow AutoMoveRowFocus EnterMoveNextColumn UseOfficePageNavigation UseTabKeyOptionsPrintAutoWidth EnableAppearanceEvenRow EnableAppearanceOddRow ExpandAllDetails ExpandAllGroupsPrintDetailsPrintFilterInfoPrintFooterPrintGroupFooterPrintHeaderPrintHorzLinesPrintPreview PrintSelectedRowsPages PrintVertLines SplitCellPreviewAcrossPages UsePrintStyles OptionsSelection EnableAppearanceFocusedCell EnableAppearanceFocusedRow EnableAppearanceHideSelection InvertSelectionMuiltiSelectMuiltiSelectMode UseIndicatorForSelection OptionsViewAllowCellMerge AllowHtmlDrawHeaders AnimationType AutoCalcPreviewLineCount ColumnAutoWidth EnableAppearanceEvenRow EnableAppearanceOddRow GroupDrawMode HeaderFilterButtonShowMode NewItemRowPosition RowAutoHeight ShowAutoFilterRow ShowChildrenInGroupPanel ShowColumnHeaders ShowDetailButtons ShowFilterPanelMode ShowFooter ShowGroupedColumns ShowGroupExpandCollapseButtons ShowGroupPanelShowHorzLinesShowIndicatorShowPreviewShowPreviewLines ShowVertLines ShowViewCaption WaitAnimationOptions行为ActiveFilterEnabled BestFitMaxRowCount DefaultRelationIndexHorzScrollStepHorzScrollVisibillyScrollStyleSynchronizeClonesVertScrollVisibility外观AppearanceBandPanel、BandPanelBackground、ColumnFilterButton、ColumnFilterButtonActive、DetailTip、Empty、EvenRow、FilterCloseButton、FilterPanel、FixedLine、FocusedCell、FocusedRow、FooterPanel、GroupButton、GroupFooter、GroupPanel、GroupRow、HeaderPanel、HeaderPanelBackground、HideSelectionRow、Horzline、OddRow、Preview、Row、RowSeparator、SelectedRow、 TopNewRow、VertLine BackColorBackColor2BorderColorFontNameSizeUnitBoldGdiCharSetItalicStrikeoutUnderlineForeColorGradientModeImageOptionsUseBackColorUseBorderColorUseFontUseForeColorUseImageUseTextOptionsTextOptionsHalighmentHotkeyPrefixTrimmingValignmentWordWrapAppearancePrintBandPanel、EvenRow、FilterPanel、FooterPanel、GroupFooter、GroupRow、HeaderPanel、Lines、OddRow、Preview、RowBackColorBackColor2BorderColorFontNameSizeUnitBoldGdiCharSetItalicStrikeoutUnderlineForeColorGradientModeImageOptionsUseBackColorUseBorderColorUseFontUseForeColorUseImageUseTextOptionsTextOptionsHalighmentHotkeyPrefixTrimmingValignmentWordWrapBorderStyleChildGridLevelName ColumnPanelRowHeightDetailHeight DetailTabHeaderLocation FixedLineWidthFocusRectStyleFooterPanelHeight GroupFooterShowModeGroupFormatGroupPanelTextGroupRowHeightImagesIndicatorWidthLevelIndentNewItemRowTextPaintStyleNamePreviewFieldNamePreviewIndentPreviewLineCountRowHeightRowSepartatorHeightShowButtonMode VertScrollTipFieldName ViewCaptioness.XtraGrid.GridControl.GridView 属性说明选项视图的行为选项允许添加新数据行允许删除数据行允许用户通过输入想得到的列值来定位行允许视图在垂直滚动中局部刷新自动展开视图中的所有组当视图中没有某些数据源中的字段时,在视图中自动创建这些列在一个单元格编辑中,是否允许通过Enter或F2来选择该单元格的所有内容当列值发生改变时,自动更新汇总摘要数据缓冲将被存入数据源的数据(当一行数据要存入到数据源时,Grid可以将它的值存入到一个内部的缓冲器中。
DevExpress使⽤教程:GridView经验⼩结(官⽅中⽂⽂献经典资料技巧)下⾯是笔者⾃⼰总结的使⽤ DevExpress Gridview 的⼀些经验⼩结,分享给⼤家:1、去除 GridView 头上的 "Drag a column header here to group by that column"--> 点击 Run Designer -> 找到:OptionView -> 将 ShowGroupPanel :设置为 false ;2、如何显⽰出 GridView ⾃带的搜索功能--> 点击 Run Designer -> 找到: OptionsFind -> 将AlwaysVisible :设置为 True3、如何将GridView的⼤⼩⾃适应窗体的⼤⼩--> 右键 GridView 控件 -> 属性 -> 找到 Dock :设置为 Fill4、当GridView数据源发⽣变化时,如何更改GridView所"绑定的值"Code注:其实就是重新创建了⼀个GridView的实例。
gridView1 = new DevExpress.XtraGrid.Views.Grid.GridView(gridControl1);gridControl1.MainView = gridView1;gridView1.OptionsView.ShowGroupPanel = false;gridView1.OptionsFind.AlwaysVisible = true;gridControl1.DataSource = dt;5、在GridControl 中添加checkbox复选框--> gridView -> run designer -> columns -> 添加⼀列(如果没有的话) 然后如图设置-- > 另外当我们需要动态绑定grid数据时,DataTable 中列的名字要和我们在gridview中设置的FileName名字要移植,不然数据是显⽰不出来的。
界面规范[V1.0]拟制人______________________审核人______________________批准人______________________[二零零七年二月二十六日]日期作者版本备注2007/04/05 范拥华 1.0.0Created by fanco Page 1 of 49 Created on 4/25/2022 3:17:00 AM目录1规范性 (4)2系统颜色、字体、图标 (4)2.1设计参考 (4)3FORM控件布局与间距 (5)3.1设计参考 (5)4对齐设置 (6)4.1设计参考 (6)5BARMANAGER控件 (6)5.1实现效果 (6)6菜单 (8)6.1设计参考 (8)6.2实现效果 (8)6.3操作步骤 (8)6.4实现代码 (9)7工具栏 (10)7.1设计参考 (10)7.2实现效果 (10)7.3操作步骤 (10)8STATUSBARS控件 (11)8.1设计参考 (11)8.2实现效果 (11)8.3操作步骤 (11)9控件 (11)9.1网格控件 (11)9.1.1GridControl (11)9.1.1.1GridControl描述 (11)9.1.1.2GridControl特殊属性 (17)9.1.2GridView (22)9.1.2.1实现效果 (23)9.1.2.2操作步骤 (23)9.1.2.3属性设置 (23)9.1.3CardView (23)9.1.3.1实现效果 (24)9.1.3.2操作步骤 (24)9.1.3.3CarView属性设置 (24)9.1.4BandedGridView (25)9.1.4.1实现效果 (25)9.1.4.2操作步骤 (25)9.1.4.3实现代码 (26)9.1.4.4属性设置 (26)9.1.4.5ColumnEdit列 (26)9.1.5AdvBandedGridView (27)9.1.5.1实现效果 (28)Created by fanco Page 2 of 49 Created on 4/25/2022 3:17:00 AM9.1.5.2操作步骤 (28)9.1.5.3实现代码 (28)9.1.5.4属性设置 (29)9.2X TRA L AYOUT控件 (29)9.2.1特性 (29)9.2.2实现效果 (29)9.2.3操作步骤 (29)9.3X TRA T AB控件 (30)9.3.1设计参考 (30)9.3.2效果及代码 (30)9.4P IVOT G RID控件 (30)9.4.1实现效果 (31)9.4.2操作步骤 (31)9.5X TRA T REE L IST控件 (32)9.5.1实现效果 (34)9.5.2操作步骤 (34)9.5.3实现代码 (36)9.5.4属性设置 (37)9.6L OOK U P E DIT控件 (37)9.6.1实现效果 (37)9.6.2操作步骤 (37)9.7G RID L OOK U P E DIT控件 (39)9.7.1设计参考 (39)9.7.2实现效果 (39)9.7.3操作步骤 (39)9.8G RID P RINT控件 (41)9.8.1实现效果 (42)9.9B UTTON控件 (44)9.9.1设计参考 (44)9.10C HECK B OX控件 (45)9.10.1设计参考 (45)9.11G ROUP B OX控件 (45)9.11.1设计参考 (45)9.12L ABEL控件 (45)9.12.1设计参考 (45)9.13LIST B OX控件 (45)9.13.1设计参考 (45)9.14L IST V IEW控件 (46)9.14.1设计参考 (46)10界面输入控制 (46)10.1设计参考 (46)11弹出子窗体 (46)11.1设计参考 (46)12消息框设置 (46)12.1设计参考 (46)13向导使用原则 (47)13.1设计参考 (47)Created by fanco Page 3 of 49 Created on 4/25/2022 3:17:00 AM14TAB键和快捷键设置 (47)14.1设计参考 (47)15系统响应时间 (48)15.1设计参考 (48)16登陆窗体与主界面 (48)16.1设计参考 (48)17系统帮助设置 (49)17.1设计参考 (49)18附录 (49)1规范性通常界面设计都按Windows界面的规范来设计,即包含“菜单条、工具栏、工具箱、状态栏、滚动条、右键快捷菜单”的标准格式,可以说:界面遵循规范化的程度越高,则易用性相应的就越好。
Delphi控件cxGrid(DevExpress控件)的使用方法1. 去掉cxgrid中抬头的box ,在tableview1的ptionsview的groupbybox=false;2. 在GRID footer 中加入sum(列), tableview1的optionsview 的footer=ture然后在cxGRid1的customize中的summary 的footer.add需要合计的列kind= skSum3. 去掉cxgrid 中的过滤下拉箭头选择tableview1.optionscustomize.columnfiltering=fasle;4. cxGrid1DBTableView1 的 OptionView中屬性GroupFooters 設為gfAlwaysVisible並設置需要求和的列,在summary.default for Groups 下add加入需要合计的字段,column下显示fieldname 为统计字段,format为格式,kind为统计方法,position 为位子spfooter 在分组的下面,spgroup 在分组的上面或用cxGridPopupMenu1,在運行時可對任意數字類型列求和,方法是只需設置cxGridPopupMenu1的屬性Grid為cxGrid1DBTableView1的cxGrid,即可實現您所需功能5. DEV Express里的cxGrid默认的数值格式带¥,怎么去掉啊!雙擊Cxgrid,選擇colmnum改變類型options.properties.Memo,在displayformat中进行设置6. 在网格最后一行的最后一格回车自动增加一条记录,并跳到新记录的第一格设置cxGrid1DBTableView1的OptionsBehavior的FocusFirsCellOnNewRecord与GoToNextCellOnEnter为True,FocusCellOnCycle设为True7. 网格中通过T ab跳转,设置cxGrid1DBTableView1的OptionsBehavior的FocusCellOnTab为True8. 设置是否能够在网格中编辑数据,设置cxGrid1DBTableView1的OptionsData的Appending设为True,Deleting为True,Editing 为True9. 设置是否能选中网格,设置cxGrid1DBTableView1的OptionsSelection的CellSelect为True10. 设置是否能够反选,设置cxGrid1DBTableView1的OptionsSelection的InsertSelect为True11. 设置行高:在cxGridDBTableView1.OptionsView.DataRowHeight12. 改变字体在cxStyleRepository 双击它,在里面添加GridTableViewStyleSheetDevExpress然后改变Style标签里面的cxStyle的字体就可以控制cxGrid的字体了13. 有图片和MEMO的例子:拖入一个cxGrid1,Table1,DataSource1。
cxGrid控件(DevexpressVCL)⾏记录前增加Checkbox的实现⽅法cxGrid控件(Devexpress VCL)⾏记录前增加Checkbox的实现⽅法我们在⽤cxGrid控件显⽰数据时,很多时侯需要在每⾏记录前提供⼀个选择框(checkbox)供⽤户进⾏记录勾选,⽐如多⾏删除、数据选择性导出等场合。
下⾯的⽰例提供了⼀种实现此种功能的解决⽅案,供⼤家参考。
程序运⾏界⾯如下,右侧为CXGRID控件,⽤来显⽰存放在数据库的⽂件信息,我们想要在每⾏记录前显⽰选择框,可以让⽤户删除或导出选中项。
⽰例中需要在cxGrid中显⽰的字段如下,其关联的Dataset为uniDocumentsa.icon,⽂件类型图标b.docDescription,⽂件名称描述c.fileSize,⽂件⼤⼩d.uploadDate,上传⽇期实现步骤1.设定cxGrid所连接的DataSource为对应的Dataset(uniDocuments),添加需要正常的字段信息2.在uniDocuments中新增⼀个计算字段,⽐如叫checked,数据类型为string类型3.更改数据集uniDocuments的SQL为:select '0' as checked, * fromDocuments4.在属性对话框中,设置新增的计算字段checked的FieldKind为fkInternalCalc5.在cxGrid控件的视图中新增checked字段的显⽰:字段显⽰属性Property设定为CheckBox,对应的ValueCheced为“1”,ValueUnCheced为“0”,详见右侧的标注处的设定。
6.代码实现//双击单元格选中(或不选中)某⾏记录procedure TmainForm.cxGrid1DBTableView1CellDblClick(Sender: TcxCustomGridTableView; ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton; AShift: TShiftState; var AHandled: Boolean);varrowIndex:Integer;beginif cxGrid1DBTableView1.DataController.RecordCount=0 thenExit;rowIndex:= cxGrid1DBTableView1.DataController.FocusedRowIndex;if cxGrid1DBTableView1.ViewData.Records[rowIndex].Values[0]='1' thencxGrid1DBTableView1.ViewData.Records[rowIndex].Values[0]:='0'elsecxGrid1DBTableView1.ViewData.Records[rowIndex].Values[0]:='1';end;//全部选中procedure TmainForm.ToolButton1Click(Sender: TObject);vari:Integer;beginif cxGrid1DBTableView1.DataController.RecordCount=0 thenExitelsebeginfor i := 0 to cxGrid1DBTableView1.DataController.RecordCount-1 dobegincxGrid1DBTableView1.ViewData.Records[i].Values[0]:='1';end;end;end;//全部取消选中procedure TmainForm.ToolButton2Click(Sender: TObject);vari:Integer;beginif cxGrid1DBTableView1.DataController.RecordCount=0 thenExitelsebeginfor i := 0 to cxGrid1DBTableView1.DataController.RecordCount-1 dobegincxGrid1DBTableView1.ViewData.Records[i].Values[0]:='0';end;end;end;好了,⾄此cxGrid控件⾏记录前增加Checkbox的功能就可以实现了,起紧运⾏测试⼀下吧!。
CXGRID控件使用说明
1.控件的安装和基本设置
在Delphi中使用CXGRID控件,首先需要将其安装到开发环境中。
安
装过程通常是通过将相关的文件复制到Delphi的安装目录下,并在
Delphi中添加相应的选项来完成的。
安装完成后,在Delphi的工具箱中可以看到CXGRID控件的图标。
将
它拖放到窗体上,就可以开始使用CXGRID控件了。
然后,可以根据需求
对CXGRID进行一些基本的设置,比如设置控件的大小、位置、标题等。
2.数据绑定和显示
在设置完数据集的源之后,可以在代码中通过调用CXGRID控件的Refresh方法来刷新数据的显示。
刷新之后,CXGRID控件会自动根据数据
集的内容生成相应的表格,并显示出来。
4.过滤和排序
对于排序,可以通过调用CXGRID控件的Sort方法来对数据进行排序。
可以根据单个字段或多个字段进行排序,还可以指定升序或降序。
5.事件的处理
6.高级功能
除了上述基本功能外,CXGRID控件还提供了一些高级功能,以满足
更复杂的需求。
比如,可以通过合并单元格来显示一些特殊的信息;可以
使用分组和汇总功能来对数据进行分析和统计;可以使用主从表格来实现
多层次的数据管理等。
总结:
以上就是CXGRID控件的使用说明。
通过CXGRID控件的灵活设置和丰富功能,开发者可以快速构建出功能强大且易于使用的数据管理界面。
希望本文对你使用CXGRID控件有所帮助。
DevExpress中GridControl使用技巧总结GridControl详解(基础)控件常用属性设置1、如何解决单击记录整行选中的问题View->OptionsBehavior->EditorShowMode设置为:Click2、如何新增一条记录(1)、gridView.AddNewRow()(2)、实现gridView_InitNewRow事件3、如何解决GridControl记录能获取而没有显示出来的问题gridView.populateColumns();4、如何让行只能选择而不能编辑(或编辑某一单元格)(1)、View->OptionsBehavior->EditorShowMode设置为:Click (2)、View->OptionsBehavior->Editable设置为:false5、如何禁用GridControl中单击列弹出右键菜单设置Run Design->OptionsMenu->EnableColumnMenu设置为:false6、如何隐藏GridControl的GroupPanel表头设置Run Design->OptionsView->ShowGroupPanel设置为:false7、如何禁用GridControl中列头的过滤器过滤器如下图所示:设置RunDesign->OptionsCustomization->AllowFilter设置为:false8、如何在查询得到0条记录时显示自定义的字符提示/显示如图所示:方法如下://When no Records Are Being Displayed privatevoidgridView1_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); } } }9、如何显示水平滚动条?设置this.gridView.OptionsView.ColumnAutoWidth = false;10、如何定位到第一条数据/记录?设置this.gridView.MoveFirst()11、如何定位到下一条数据/记录?设置this.gridView.MoveNext()12、如何定位到最后一条数据/记录?设置this.gridView.MoveLast()13、设置成一次选择一行,并且不能被编辑this.gridView1.FocusRectStyle =DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.Ro wFocus;this.gridView1.OptionsBehavior.Editable = false;this.gridView1.OptionsSelection.EnableAppearanceFocus edCell = false;14、如何显示行号?this.gridView1.IndicatorWidth = 40; //显示行的序号private void gridView1_CustomDrawRowIndicator(object sender,RowIndicatorCustomDrawEventArgs e){ if (.IsRowIndicator &&e.RowHandle>=0){ .DisplayText = (e.RowHandle + 1).ToString(); } }15、如何让各列头禁止移动?设置gridView1.OptionsCustomization.AllowColumnMoving= false;16、如何让各列头禁止排序?设置gridView1.OptionsCustomization.AllowSort = false;17、如何禁止各列头改变列宽?设置gridView1.OptionsCustomization.AllowColumnResizing = false;GridControl详解(一)原汁原味的表格展示Dev控件中的表格控件GridControl控件非常强大。
Delphi cxGrid 实用教程:
LookAndFeel是设置外观感觉
运行delphi 7,建一个application,拖上cxgrid控件,加入数据库控件,此处不需要多讲。
如下图:
glBoxPacking,btvBoxPacking是自己定义的名字。
1.把cxgrid连上datasouce:
点一下中的glBoxpacking,然后设定ds
A 不显示下面的Drag a columm header here to group by that column:
设置如下:点击 btvBoxPacking,选中“OptionsView”->GroupByBox 设为False,如图:
设置完后显示:
在cxGrid控件上双击调出设置画面,或者单击中“Customize”,画面如下:
因为cxGrid标题为多行合并标题,所以需要在views里增加cxGridDBBandedTableView,然后删除原来的cxGridDBTableView,如下图:
命名为bbtvBoxPacking,删除btvBoxPacking。
然后选中structure,
在“GridView”中选取“bbtvBoxPacking”,结果如下图:
先设定“Columns”中列。
(这时查看一下cxGrid中的DataSouce存不存在,可能会因删除btvBoxPacking,而清空,如果不存在,选中即可)
如果要显示DataSouce里所有的列,可以点击上图中的“Retrieve Fields”,这里选取所有的,如果有ADD的话,需要手动指定DataField是哪一列,和数据库表的字段名一样。
这时,cxGrid会显示如下图:
在“Bands”中,选增加需要绑定的列。
这里总共增加三列。
依次类推:
然后在Columms中选取需要绑定的列,进行绑定,如下图:
依次类推,全部设置完后,如下图:
如不想每列都出现下面的箭头,可以选中此列,做如下修改:
改变下线边框的格式:在如下画面里做修改:
设定双标题头:插入页脚:
加入页脚
选中图中的地方,其它的类似。
然后再设置footer,如下图:
注意上图中的红框线。
运行后如下图:
设置隔行变色,选中变色。
当GroupByBox时,如下:
在分组里做合计时,需要做到两步,第一步:
第二步:
注意Position 如果选择“spGroup”,则如下红框。
改成spFooter,则显示如下:运行时如下:
加入cxGridPopupMenu控件,在合计处点右键,会出现:。