GridControl详解
- 格式:docx
- 大小:4.12 MB
- 文档页数:80
gridctrl说明wangyf2022-11-30目录1.前言 (2)2.CGridCtrl 类的建立 (2)3.CGridCtrl 中文说明 (4)3.1介绍 (4)3.2控件的特点 (4)3.2.1列和行的数目 (5)3.2.2虚拟模式 (6)3.2.3总体的外观和特征 (7)3.2.4颜色 (8)3.2.5普通的单元格信息 (9)3.2.6排序操作 (11)3.2.7打印 (12)3.2.8结构、定义和消息 (12)1.前言在数据库的操作系统中,经常要遇到对数据库的内容进行显示、修改、添加和删除等功能,而一般情况下数据库的容量都是很大的,为此我们通常选用以电子表格的形式来显示数据库的内容,并在其上完成对数据库的修改、添加和删除,使对数据库的操作既直观又方便;如用VB5.0下DBGrid Control来实现以上功能是较为方便的,但由于VB的通信速度和数据的处理速度较慢,特别对于要处理和显示的数据量较大时,其速度较慢表现得尤为明显,为此我们选用在VC++5.0下用CGridCtrl类来实现。
2.CGridCtrl 类的建立CGridCtrl 类派生于CWnd 类,该类主要包含以下八个方面的函数,其函数形式如下:Class CgridCtrl : public CWnd{// 1. CGridCtrl 类的构造函数CGridCtrl(int nRows = 0, int nCols = 0, int nFixedRows = 0, int nFixedCols = 0);BOOL Create(const RECT& rect, CWnd* parent, UINT nID, DWORD dwStyle = WS_CHILD | WS_BORDER |WS_TABSTOP | WS_VISIBLE);// 2. 表格行、列数方面的函数BOOL SetRowCount(int nRows) ;/ 设置表的行数BOOL SetColumnCount(int nCols) ;// 设置表的列数BOOL SetFixedRowCount(int nFixedRows = 1) ;// 设置表的固定行数BOOL SetFixedColumnCount(int nFixedCols = 1) ;// 设置表的固定列数int GetFixedRowCount() const ;// 取表的固定行数int GetFixedColumnCount() const ;// 取表的固定列数……// 3. 表格尺寸大小方面的函数BOOL SetRowHeight(int row, int height) ;// 设置表格单元的高度BOOL SetColumnWidth(int col, int height) ;// 设置表格单元的宽度int GetRowHeight(int nRow) const ;// 获取表格单元的高度int GetColumnWidth(int n Col) const ;// 获取表格单元的宽度void AutoSize() ;// 对表格单元的高度与宽度进行自动设置……// 4. 表格显示与特征方面的函数void SetImageList(CImageList* pList) ;// 设置列表图标void SetEditable(BOOL bEditable = TRUE) ;// 设置表格的编辑状态BOOL SetColumnType(int nCol, int nType) ;// 设置表格的列状态……// 5. 颜色方面的函数void SetTextColor(COLORREF clr) ;// 设置输入表格的文本颜色void SetTextBkColor(COLORREF clr) ;// 设置可供输入文本的表格颜色void SetFixedTextColor(COLORREF clr) ;// 设置输入固定表格的文本颜色void SetFixedBkColor(COLORREF clr) ;// 设置固定表格颜色……// 6. 表格信息函数BOOL SetItem(const GV_ITEM* pItem) ;// 向表格中输入信息BOOL SetItemText(int nRow, int nCol, LPCTSTR str) ;// 向某一单元表格中输入文本BOOL SetItemImage(int nRow, int nCol, int iImage) ;// 在某一单元表格中设置图标……// 7. 编辑方面的函数virtual void OnEditCell(int nRow, int nCol, UINT nChar) // 开始对表格进行编辑virtual void OnEndEditCell(int nRow, int nCol, CString str) // 结束对表格编辑……// 8. 表格打印函数void Print() ;// 打印表格……}CGridCtrl 类的构造函数形式如下:CGridCtrl::CGridCtrl(int nRows, int nCols, int nFixedRows, i nt nFixedCols){m_crWindowText = ::GetSysColor(COLOR_WINDOWTEXT); m_crWindowColour = ::GetSysColor(COLOR_WINDOW); m_cr3DFace = ::GetSysColor(COLOR_3DFACE);m_nRows = 0; // 初始电子表格的行数m_nCols = 0; // 初始电子表格的列数m_nFixedRows = 0; // 初始化固定表格的行数m_nFixedCols = 0; // 初始化固定表格的列数m_bEditable =TRUE; // 初始化表格为可编辑状态……// 初始化设置表格的行列数SetRowCount(nRows); SetColumnCount(nCols);SetFixedRowCount(nFixedRows); SetFixedColumnCount(nFixedCols);// 初始化表格的背景颜色及输入表格的文本颜色SetTextColor(m_crWindowText); SetTextBkColor(m_crWindowColour); SetFixedTextColor(m_crWindowText);SetFixedBkColor(m_cr3DFace);……}对表格中所输入信息属性的描述,是通过定义一结构体函数来实现,该结构体函数形式如下:typedef struct _GV_ITEM{int row,col; //输入信息的位置UINT mask; // 输入信息的灰度值UINT state; //表格单元的状态UINT nFormat; //信息的输入形式CString szText; // 输入表格单元的文本} GV_ITEM;将CGridCtrl 类与以下类结合起来,即可构造成在其上可进行编辑和修改的电子表格,这些类分别为:1)用于单元表格范围的两个类:CCellRange 类和CCellID 类;2)单元表格状态属性的类:CGridCell 类;3)对表格进行编辑的两个类:CInplaceEdit 类和CInplaceList 类;3.CGridCtrl 中文说明3.1介绍当我努力为显示和编辑现有表中的数据而使用CListCtrl 到了极限之后,我意识到我所需要的只不过是一个专用的Grid 控件而已。
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设置。
gridcontrol绑定数据源的方法gridcontrol是一种常用的数据展示控件,可以在Windows Forms 应用程序中使用。
它可以方便地绑定数据源,实现数据的显示和编辑。
本文将介绍几种常见的方法来使用gridcontrol绑定数据源。
方法一:使用DataTable绑定数据源DataTable是一种用于存储数据的对象,可以方便地绑定到gridcontrol上。
首先,我们可以创建一个DataTable对象,并添加列和行。
然后,将DataTable对象绑定到gridcontrol的DataSource属性上即可。
方法二:使用List绑定数据源除了DataT able,我们还可以使用List来存储数据,并将其绑定到gridcontrol上。
首先,我们需要创建一个包含数据的List对象,并定义数据的结构。
然后,将List对象转换为BindingList对象,并将其绑定到gridcontrol的DataSource属性上。
方法三:使用BindingSource绑定数据源BindingSource是一种数据源对象,可以方便地管理和控制数据的显示和编辑。
我们可以创建一个BindingSource对象,并将数据源(如DataTable或List)赋值给它。
然后,将BindingSource对象绑定到gridcontrol的DataSource属性上。
方法四:使用自定义数据源类绑定数据源如果我们的数据源不是DataTable或List,而是自定义的数据源类,我们可以实现IBindingList接口并重写其中的方法,以实现数据绑定的功能。
然后,将自定义数据源类的对象绑定到gridcontrol的DataSource属性上即可。
方法五:使用数据绑定事件绑定数据源除了直接将数据源对象赋值给gridcontrol的DataSource属性,我们还可以通过数据绑定事件来动态地绑定数据源。
在数据绑定事件中,我们可以编写代码来获取数据源,并将其赋值给gridcontrol 的DataSource属性。
ALV_GRID_CONTROL详解⼀.ALV介绍 (2)⼆.ALV GRID CONTROL (ALV⽹格控制器) (2)三.ALV GRID CONTROL 实例 (2)四、ALV GRID相关的⼏个控制结构 (3)1.字段⽬录[Field catalog] (3)2.布局控制[layout] (5)3.打印和排序,过滤控制 (6)五.编写简单的ALV程序. (6)⾸先ALV的显⽰需要有⼏个先决条件. (7)第⼀步:创建个SCREEN,在屏幕上创建个容器,CONTAINER.定义变量 (7)第⼆步: 创建ALV这个对象,它的⽗组件是那个容器. (7)第三步,获取要显⽰数据的字段⽬录. (10)第四步,设置布局 (11)第五步,排除不需要的标准按钮 (11)⽅法: (12)功能⼀:在第⼀次显⽰以后,修改字段⽬录和布局. (12)功能⼆:设置排序条件 (12)功能三:设置过滤(和排序类似) (13)功能四:选择⽅式 (13)功能五:颜⾊设置 (14)功能六:插⼊超链接 (16)功能七:把字段设置为下拉 (17)基于事件的附加功能 (18)定义事件处理类. (19)类的实现的⼀些概要代码 (20)把事件管理类注册到ALV GRID的实例事 (21)1.热点事件(单击事件) (22)2.双击事件 (22)3.添加⾃定义的按钮和响应命令 (23)4.覆盖标准的功能. (25)5.设置单元格的风格 (25)6. 控制数据变化 (27)⼀.ALV介绍The ALV Grid Control (ALV = S A P L ist V iewer)是⼀个显⽰列表的灵活的⼯具,它提供了基本功能的列表操作,也可以通过⾃定义来进⾏增强,因此可以允许你可以在⼤型的应⽤程序中使⽤.SAP提⽰: 在SAP的开发项⽬中,ALV GRID也可以作为修改和创建数据的⼀种⼯具,然⽽,⽬前这个功能只在实验计划中使⽤,还没有向客户发布.下⾯是⼀个ALV GRID的图⽚:它包括3⼤部分,⼯具栏,标题,⽤于显⽰数据的⽹格控制器.如果有必要,⽤户可以隐藏标题和⼯具栏.ALV家族包含3种ALV⼯具:简易的,两层ALV,分等级连续的列表和树形结构的ALV.⼆.ALV GRID CONTROL (ALV⽹格控制器)ALV GRID CONTROL使⽤了控制器技术以实现艺术性的屏幕显⽰,象所有的控制器⼀样,ALV GRID CONTROL通过系统中的⼀个全局的类提供了⽅法,以响应它的动作.使⽤了ABAP的对象以后,列表是通过ALV的⼀个实例(INSTANCE)来显⽰的,程序员可以使⽤ABAP对象的事件管理. 三.ALV GRID CONTROL 实例ALV GRID实例的定义,参照CL_GUI_ALV_GRID类data ALV_GRID1 type ref to cl_gui_alv_grid.ALV GRID继承结构:四、ALV GRID相关的⼏个控制结构1.字段⽬录 [Field catalog]字段⽬录是⽤来控制ALV显⽰的⽹格中每个字段的属性的,⽐如字段的顺序,对齐⽅式,可编辑状态,颜⾊,等等.常⽤的控制字段如下:(下⾯的⽰例将说明这些字段的使⽤,参考STRUCTURE LVC_S_FCAT)2.布局控制[layout]布局是⽤来控制整个ALV的⼀个布局,⽐如ALV的标题,是否可编辑,⾏颜⾊,列颜⾊.参照ALV的控制结构[LVC_S_LAYO],以后的例⼦我将详细介绍如何设置⾏颜⾊和列颜⾊. 详细的结构说明3.打印和排序,过滤控制打印的参数控制请参考结构[LVC_S_PRNT]排序的参数控制请参考结构[LVC_S_SORT]过滤的参数控制请参考结构[LVC_S_FILT]这⾥不再⼀⼀解释,进⼊中⽂版本,⾥⾯应该也有解释的,虽然⼀些不是很清楚.五.编写简单的ALV程序.⾸先这⾥就不详细介绍DIALOG的⽤法了.OO的ALV GRID必须存在于⼀个容器当中,就是FUNCTION的ALV,其实也是⼀样的,底层也是使⽤CL_GUI_ALV_GRID 这个类的.⾸先ALV的显⽰需要有⼏个先决条件.1,字段⽬录,这个是必须的,如果没有这个参数,参考⼀个数据字典也是可以的,就是参数I_STRUCTURE_NAME.2.存放数据的内表,最好内表的结构和字段⽬录是⼀致的,否则可能会出现⼀些⽆法预知的错误,当然你说我⾮要不⼀样,那也不⼀定会出现错误.我建议是最好⼀样的.这2个是必须的,布局的话,应该是可以不设置的,使⽤默认的就可以了.第⼀步:创建个SCREEN,在屏幕上创建个容器,CONTAINER.定义变量.DATA: wcl_container TYPE REF TO cl_gui_custom_container,wcl_alv TYPE REF TO cl_gui_alv_grid .*--- 存放字段⽬录的内表DATA gt_fieldcat TYPE lvc_t_fcat .*--- 布局结构DATA gs_layout TYPE lvc_s_layo .*----声明需要显⽰的内表(以SFLIGHT为例)DATA BEGIN OF gt_list OCCURS0 .INCLUDE STRUCTURE sflight .DATA END OF gt_list .第⼆步: 创建ALV这个对象,它的⽗组件是那个容器.在PBO中写⼊如下代码:PROCESS BEFORE OUTPUT .MODULE display_alv .创建DISPLAY_ALV的MODULE后,写下如下代码:MODULE display_alv OUTPUT .PERFORM display_alv .ENDMODULE . "display_alv OUTPUT在FORM DISPLAY_ALV中,判断ALV实例是否存在,如果不存在,则创建:FORM display_alv .IF wcl_alv IS INITIAL .CREATE OBJECT: wcl_containerEXPORTINGcontainer_name = 'ALV_CON'.CREATE OBJECT wcl_alvEXPORTINGi_parent = wcl_container.*-----准备获取字段⽬录PERFORM prepare_field_catalog CHANGING gt_fieldcat .*-----设置布局PERFORM prepare_layout CHANGING gs_layout .*-----显⽰alvCALL METHOD gr_alvgrid->set_table_for_first_display EXPORTING * I_BUFFER_ACTIVE =* I_CONSISTENCY_CHECK =* I_STRUCTURE_NAME =* IS_VARIANT =* I_SAVE =* I_DEFAULT = 'X'is_layout = gs_layout* IS_PRINT =* IT_SPECIAL_GROUPS =* IT_TOOLBAR_EXCLUDING =* IT_HYPERLINK =CHANGINGit_outtab = gt_list[]it_fieldcatalog = gt_fieldcat* IT_SORT =* IT_FILTER =EXCEPTIONSinvalid_parameter_combination = 1program_error = 2too_many_lines = 3OTHERS = 4 .ELSE .*----刷新alvCALL METHOD gr_alvgrid->refresh_table_display* EXPORTING* IS_STABLE =* I_SOFT_REFRESH =EXCEPTIONSfinished = 1OTHERS = 2 .IF sy-subrc <> 0.*--异常处理ENDIF.ENDIF .ENDFORM. "display_alv⽅法"set_table_for_first_display"的参数说明⽅法"REFRESH_TABLE_DISPLAY"的参数说明第三步,获取要显⽰数据的字段⽬录.有两种⽅式.1.⼿动创建FORM prepare_field_catalog CHANGING pt_fieldcat TYPE lvc_t_fcat . DATA ls_fcat type lvc_s_fcat .ls_fcat-fieldname = 'CARRID' .ls_fcat-inttype = 'C' .ls_fcat-outputlen = '3' .ls_fcat-coltext = 'Carrier ID' .ls_fcat-seltext = 'Carrier ID' .APPEND ls_fcat to pt_fieldcat .CLEAR ls_fcat .ls_fcat-fieldname = 'CONNID' .ls_fcat-ref_table = 'SFLIGHT' .ls_fcat-ref_table = 'CONNID' .ls_fcat-outputlen = '3' .ls_fcat-coltext = 'Connection ID' .ls_fcat-seltext = 'Connection ID' .APPEND ls_fcat to pt_fieldcat .ENDFORM .2.半⾃动的创建FORM prepare_field_catalog CHANGING pt_fieldcat TYPE lvc_t_fcat . DATA ls_fcat type lvc_s_fcat .CALL FUNCTION'LVC_FIELDCATALOG_MERGE'EXPORTINGi_structure_name = 'SFLIGHT'CHANGINGct_fieldcat = pt_fieldcat[]EXCEPTIONSinconsistent_interface = 1program_error = 2OTHERS = 3.IF sy-subrc <> 0.*--Exception handlingENDIF.LOOP AT pt_fieldcat INTO ls_fcat .CASE pt_fieldcat-fieldname .WHEN'CARRID' .ls_fcat-outpulen = '10' .ls_fcat-coltext = 'Airline Carrier ID' .MODIFY pt_fieldcat FROM ls_fcat .WHEN'PAYMENTSUM' .ls_fcat-no_out = 'X' .MODIFY pt_fieldcat FROM ls_fcat .ENDCASE .ENDLOOP .ENDFORM . "prepare_field_catalog第四步,设置布局FORM prepare_layout CHANGING ps_layout TYPE lvc_s_layo.ps_layout-zebra = 'X' .ps_layout-grid_title = 'Flights' .ps_layout-smalltitle = 'X' .ENDFORM. " prepare_layout第五步,排除不需要的标准按钮(可选,这个是第⼀种⽅法,还有另外⼀种,在添加⾃定义的按钮的时候介绍)在你的ALV上,如果你想排除⼀些你不想要的标准按钮,你可以把需要排除的按钮填⼊到表UI_FUNCTIONS中,然后传给set_table_for_first_display⽅法的参数"IT_TOOLBAR_EXCLUDING".这些按钮的功能码⼀般都可以通过查看类cl_gui_alv_grid的常量属性中获取到,或者⾃⼰加个断点,在after_user_command事件中.如果你要隐藏全部的⼯具条,你可以把layout中的no_toolbar设置为"X".FORM exclude_tb_functions CHANGING pt_exclude TYPE ui_functions .DATA ls_exclude TYPE ui_func.ls_exclude = cl_gui_alv_grid=>mc_fc_maximum .APPEND ls_exclude TO pt_exclude.ls_exclude = cl_gui_alv_grid=>mc_fc_minimum .APPEND ls_exclude TO pt_exclude.ls_exclude = cl_gui_alv_grid=>mc_fc_subtot .APPEND ls_exclude TO pt_exclude.ls_exclude = cl_gui_alv_grid=>mc_fc_sum .APPEND ls_exclude TO pt_exclude.ls_exclude = cl_gui_alv_grid=>mc_fc_average .APPEND ls_exclude TO pt_exclude.ls_exclude = cl_gui_alv_grid=>mc_mb_sum .APPEND ls_exclude TO pt_exclude.ls_exclude = cl_gui_alv_grid=>mc_mb_subtot .ENDFORM .⽅法:按照上⾯的步骤,⼀个ALV的DEMO基本可以创建了.下⾯我们将讲述⼀些功能.功能⼀:在第⼀次显⽰以后,修改字段⽬录和布局.在运⾏的时候,很有可能需要在显⽰之后,需要设置⼀个新的布局或者字段⽬录.有下⾯这些⽅法去实现.字段⽬录: get_frontend_fieldcatalogset_frontend_fieldcatalog布局:get_frontend_layoutset_frontend_layout使⽤这些⽅法,你在执⾏的任何时候,可以获取这些内容,然后修改他们.DATA ls_fcat TYPE lvc_s_fcat .DATA lt_fcat TYPE lvc_t_fcat .DATA ls_layout TYPE lvc_s_layo .CALL METHOD gr_alvgrid->get_frontend_fieldcatalogIMPORTINGet_fieldcatalog = lt_fcat[].LOOP AT lt_fcat INTO ls_fcat .IF ls_fcat-fieldname = 'PAYMENTSUM' .ls_fcat-no_out = space .MODIFY lt_fcat FROM ls_fcat .ENDIF .ENDLOOP .CALL METHOD gr_alvgrid->set_frontend_fieldcatalogEXPORTINGit_fieldcatalog = lt_fcat[].CALL METHOD gr_alvgrid->get_frontend_layoutIMPORTINGes_layout = ls_layout.ls_layout-grid_title = 'Flights (with Payment Sums)' .CALL METHOD gr_alvgrid->set_frontend_layoutEXPORTINGis_layout = ls_layout.功能⼆:设置排序条件有时候我们需要使⽤到数据的排序.这个可以通过填充参考结构LVC_T_SORT创建的内表来实现,这个内表中包含了排序的标准.可以传递给set_table_for_first_display这个⽅法的IT_SORT参数来初始化⼀个排序.FORM prepare_sort_table CHANGING pt_sort TYPE lvc_t_sort .DATA ls_sort TYPE lvc_s_sort .ls_sort-spos = '1' .ls_sort-fieldname = 'CARRID' .ls_sort-up = 'X' . "A to Zls_sort-down = space .APPEND ls_sort TO pt_sort .ls_sort-spos = '2' .ls_sort-fieldname = 'SEATSOCC' .ls_sort-up = space .ls_sort-down = 'X' . "Z to AAPPEND ls_sort TO pt_sort .ENDFORM. " prepare_sort_table这有2点特别的说明:1.如果这边排序的字段名,不存在于字段⽬录中,那将出现DUMP.2.排序以后,垂直的⽹格中,如果出现相同的内容,就会合并,如果要避免,请在布局中设置"no_merging"为"X" .你可以通过使⽤⽅法“get_sort_criteria” 和“set_sort_criteria”来获取和设置排序的标准.功能三:设置过滤(和排序类似)ALV的标准按钮中已经有过滤的功能,我们也可以在初始显⽰的时候就设置过滤条件.我们需要把过滤条件填充到参考表类型"LVC_T_FILT"创建的内表中.过滤条件是类似⼀个RANGES结构的.然后把这个内表传递给⽅法"SET_TABLE_FOR_FIRST_DISPLAY"中的参数"IT_FILTER"FORM prepare_filter_table CHANGING pt_filt TYPE lvc_t_filt .DATA ls_filt TYPE lvc_s_filt .ls_filt-fieldname = 'FLDATE' .ls_filt-sign = 'E' .ls_filt-option = 'BT' .ls_filt-low = '20030101' .ls_filt-high = '20031231' .APPEND ls_filt TO pt_filt .ENDFORM. " preparefiltertable我们可以使⽤"get_filter_criteria" 和"set_filter_criteria"来获取过滤条件和设置过滤条件.功能四:选择⽅式有时候,我们需要选择⼀些单元格,⾏或者列,在布局中,有个参数"SEL_MODE"可以设置我们不同的选择⽅式.下⾯是参数的介绍.和不同的地⽅.注意:1.如果你设置了ALV是可编辑的,可能会覆盖你在布局中选择⽅式的设置的.2.设置了选择⽅式以后,我们可以使⽤很多⽅法来获取⽤户的选择.⽐如"GET_SELECTED_CELLS","GET_SELECTED_CELLS_ID", "GET_SELECTED_ROWS","GET_SELECTED_COLUMNS"3.在执⾏PAI以后,⽤户所选择的单元格,⾏或者列可能丢失.你可以在PBO中,使⽤对应的SET⽅法来恢复这些选择.功能五:颜⾊设置有的时候,我们需要在ALV⽹格上绘上⼀些颜⾊.可以给特定的⾏,某个特定的列,某个特定的单元格绘制颜⾊.如果某列被设置为关键列,这列的颜⾊将被⾃动绘制,⽽不需要我们额外的指定.先介绍ALV⾥⾊码.就是颜⾊编码,4位CHAR型.Cx y z------------------------------------------Color | | || 1/0: 相反开/关1/0: 强化开/关其中C是固定的第⼀位,第⼆位代表是颜⾊编码(1到7),第三位是加强的设置,第四位是相反,个⼈理解,在强化关闭的情况下,相反的作⽤是背景和字体的变化.颜⾊编码:A)设置列的颜⾊.我们可以通过字段⽬录的"emphasize"控制字段来控制某列的颜⾊.这个字段同样是4位的CHAR型,传⼊上述的颜⾊编码.例如:LS_FCAT-EMPHASIZE = 'C701'.如果这列被设置为关键列,就是 LS_FCAT-KEY = 'X' ,那么颜⾊设置就不会起作⽤.请注意,⾃动产⽣的字段⽬录中,KEY的设置是⾃动获取的.B)设置⾏的颜⾊为某⾏设置颜⾊,是有点复杂的,我们需要在要显⽰的数据内表中增加⼀个字段,这个字段不需要在字段⽬录中存在.同样,这个字段也是4位的CHAR型,符合颜⾊编码的定义.那我们就需要这样来定义我们的数据内表:DATA BEGIN OF gt_list OCCURS0 .INCLUDE STRUCTURE SFLIGHT .DATA rowcolor(4) TYPE c .DATA END OF gt_list .很明显,填⼊颜⾊编码以后,ALV怎么知道它是我们⽤来设置颜⾊的呢,在布局中,有个控制字段"INFO_FNAME",我们可以设置这个字段来告诉ALV,我们的颜⾊字段是哪个.ps_layout-info_fname = 'ROWCOLOR'.请注意,这个字段随便你起名字,但是记住,⼀定是数据内表⾥的字段,⽽且这边设置的时候⼀定要⼤写.你可以在任何时候设置⾏的颜⾊,只需要去修改内表⾥的这个字段的值,但是记得,⼀定要刷新以后才起作⽤.C)设置单元格的颜⾊设置单元格和设置⾏的颜⾊,本质上没有什么⼤的区别,但是定位单元格需要2个参数.我们需要在数据内表中插⼊⼀个表类型的字段,这样我们的数据内表就变成了DEEP结构了,不过ALV是可以处理的.不需要担⼼.插⼊的这个表类型的类型为"LVC_T_SCOL".⾥⾯有3个参数:FNAME告诉我们你需要设置的是哪个字段,如果为空,然后直接在COLOR中设置颜⾊,就是整⾏设置为这个颜⾊.如果具体到某个单元格,必须指定是哪个字段.COLOR字段是⽤来设置颜⾊的.NOKEYCOL字段⽐较关键了.设置为关键列的⼀些字段,我们的颜⾊设置可能被覆盖.通过这个字段的设置,可以避免被关键列覆盖.同样,ALV在布局中有个字段"CTAB_FNAME"告诉我们,数据内表中,哪个字段是⽤来设置单元格的颜⾊的.DATA BEGIN OF gt_list OCCURS0 .INCLUDE STRUCTURE SFLIGHT .DATA rowcolor(4) TYPE c .DATA cellcolors TYPE lvc_t_scol .DATA END OF gt_list .DATA ls_cellcolor TYPE lvc_s_scol ....READ TABLE gt_list INDEX5 .ls_cellcolor-fname = 'SEATSOCC' .ls_cellcolor-color-col = '7' .ls_cellcolor-color-int = '1' .APPEND ls_cellcolor TO gt_list-cellcolors .MODIFY gt_list INDEX5 .注意:颜⾊设置中有优先级顺序,他们是单元格--->⾏--->列.功能六:插⼊超链接插⼊超链接是通过⼀个含有超级链接和句柄的表来实现的.这个表类型为"LVC_T_HYPE" ,句柄是⼀个INT4类型的字段,我们需要在数据显⽰的内表中,加⼊这样的字段,来告诉ALV,我们的字段指定的句柄,从⽽找到对应的超级链接.在字段⽬录中,WEB_FIELD是⽤来指定对应的句柄名的.下⾯举个例⼦来说明,我们要为字段CARRID,CONNID建⽴超级链接:⾸先,内表定义中,我们加⼊2个句柄字段:DATA BEGIN OF gt_list OCCURS0 .INCLUDE STRUCTURE SFLIGHT .DATA rowcolor(4) TYPE c .DATA cellcolors TYPE lvc_t_scol .DATA carrid_handle TYPE int4 .DATA connid_handle TYPE int4 .DATA END OF gt_list .第⼆: 建⽴⼀个超级链接内表,⾥⾯存放句柄所对应的超级链接.创建的时候注意,它参考的表类型,⼀定是"LVC_T_HYPE". FORM prepare_hyperlinks_table CHANGING pt_hype TYPE lvc_t_hype .DATA ls_hype TYPE lvc_s_hype .ls_hype-handle = '1' .ls_hype-href = '/doc/92c7786f1eb91a37f1115c8d.html /carrids/car1' .APPEND ls_hype TO pt_hype .ls_hype-handle = '2' .ls_hype-href = '/doc/92c7786f1eb91a37f1115c8d.html /carrids/car1' .APPEND ls_hype TO pt_hype .ls_hype-handle = '3' .ls_hype-href = '/doc/92c7786f1eb91a37f1115c8d.html /carrids/car1' .APPEND ls_hype TO pt_hype .ls_hype-handle = '4' .ls_hype-href = '/doc/92c7786f1eb91a37f1115c8d.html /connids/con11' .APPEND ls_hype TO pt_hype .ls_hype-handle = '5' .ls_hype-href = '/doc/92c7786f1eb91a37f1115c8d.html /connids/con12'APPEND ls_hype TO pt_hype ... ..ENDFORM .第三.通过字段⽬录FIELDCATLOG来指定相应的句柄字段.对于CARRID的field catalogLs_fieldcat-web_field = 'CARRID_HANDLE'.对于CONNID的field catalogLs_fieldcat-web_field = 'CONNID_HANDLE’.在⽅法"SET_TABLE_FOR_FIRST_DISPLAY"中把句柄内表传给参数it_hyperlink。
Dev控件研究(一)gridcontrol简单使用最近,工作安排,要我研究dev控件。
项目没开始,被要求搞研究。
界面dev的控件表现效果及实用功能都是蛮方便和强大的。
gridcontrol中有5种view 型式,普通的是gridview,然后分别为cardview、BandedView、Advanced BandedView、LayoutView;共5种。
gridview跟WinForm自带的差不多,有一些高级特性,比如说可以把某一列拿出来分组啊,之类的。
我这几天主要研究了这三个:LayoutView、BandedView、AdvancedBandedView。
LayoutView实现的视觉效果可以说很。
炫~(我们做应用行业软件的。
项目组长却要求这么炫的效果。
我觉得他是想不开。
)仔细看了dev的demo源代码,实际上这里只需要在gridcontrol 中的designer中的view组中把OptionView下的viewmode 设置成“Carousel”就达到这种“旋转木马”式的gridcontrol view 特效了。
关键部分还是细节,layoutView1.OptionsCarouselMode.PitchAngle 这个属性决定“旋转木马”的pitch angle 螺距角; 螺旋角; 螺旋升角; 俯仰角; 倾角; 节锥半角【主科技词汇】。
Roll Angle 属性决定着倾侧角度~~其它的属性都好说。
然后就是columns的设置问题了,设置column的长高啊什么的,现在还没完全弄明白~~。
有时候设置了,coumn没变。
反正要想真正达到图片中的那种效果,得很细心的搞一下才行。
将其设置为图片类型的时候,是比较痛苦的事情。
我开始以为在给gridcontrol的datatable 里面设置一列为路径string 就够了~结果试了半天(没办法,源码里面调用的是xml文件!~~图片是Int64类型的,刚开始没仔细看。
gridcontrol设计器中format rules的用法-回复GridControl是DevExpress公司推出的一款强大的Windows.Forms控件,它为开发人员提供了一种有效管理和显示数据的方式。
而在GridControl设计器中的format rules则是该控件的一个重要功能,它允许开发人员根据特定的条件对控件中的数据进行自定义格式化。
在本文中,我将详细介绍GridControl设计器中format rules的用法,以帮助读者更好地了解和应用这个功能。
第一步:理解format rules的概念和作用在GridControl控件中,format rules用于对数据进行自定义格式化,以便更好地展示和分析数据。
通过format rules,开发人员可以根据特定的条件或规则对某一列或某一行的数据进行格式化,包括改变数据的字体、背景色、前景色等。
这样可以使数据更加易读和明晰,方便用户进行数据分析和决策。
第二步:了解format rules的类型和设置在GridControl设计器中,format rules可以分为以下几种类型:1. Expression Format RuleExpression Format Rule是基于表达式的规则,它根据用户定义的表达式判断某一列或某一行的数据是否满足特定的条件,并根据条件进行格式化。
设置Expression Format Rule时,需要定义条件表达式和对应的格式化选项,如字体颜色、背景色等。
2. Color Scale Format RuleColor Scale Format Rule是基于颜色刻度的规则,它将数据映射到一个颜色刻度上,根据数据的大小或比例在颜色刻度中显示不同的颜色。
开发人员可以根据数据的不同取值范围设置对应的颜色,以更直观地展示数据的相对大小。
3. Gradient Format RuleGradient Format Rule是基于渐变效果的规则,它可以根据数据的相对大小在单元格中应用渐变效果。
GridControl详解(一)原汁原味的表格展示Dev控件中的表格控件GridControl控件非常强大。
不过,一些细枝末节的地方有时候用起来不好找挺讨厌的。
使用过程中,多半借助Demo和英文帮助文档。
网上具体的使用方法也多半零碎。
偶遇一个简单而且详细的使用文档。
好记性不如烂笔头!转载过来,整理整理发出来做个记录,总共有十个小节。
做的非常精细,非常感谢原作者。
插件所在位置使用时拖拽过来,如下所示即使拖拽过来原封不动的样子:在程序中写入构建一个表格的代码:private DataTable InitDt(){DataTable dt = new DataTable("个人简历");dt.Columns.Add("id",typeof(int));dt.Columns.Add("name", typeof(string));dt.Columns.Add("sex", typeof(int));dt.Columns.Add("address", typeof(string));dt.Columns.Add("aihao", typeof(string));dt.Columns.Add("photo", typeof(string));dt.Rows.Add(new object[] { 1, "张三", 1, "东大街6号", "看书", "" });dt.Rows.Add(new object[] { 1, "王五", 0, "西大街2号", "上网,游戏", "" });dt.Rows.Add(new object[] { 1, "李四", 1, "南大街3号", "上网,逛街", "" });dt.Rows.Add(new object[] { 1, "钱八", 0, "北大街5号", "上网,逛街,看书,游戏", "" }); dt.Rows.Add(new object[] { 1, "赵九", 1, "中大街1号", "看书,逛街,游戏", "" }); return dt;}书写gridControl1绑定数据方法:private void BindDataSource(DataTable dt){//绑定DataTablegridControl1.DataSource = dt;//绑定DataSet//gridControl1.DataSource = ds;//gridControl1.DataMember = "表名";}程序调用:BindDataSource(InitDt());呈现结果如下:GridControl详解(二)表格的列名配置点击Run Designer控件上的按钮,弹出视图设计窗口:列配置:我们配置完列名后,会发现设计视图发生了变化:运行结果:GridControl详解(三)列数据的格式设置为了测试方便,我们加入新的3列,格式分别是数据,时间,字符串。
GridControl(基于GridView)总结gridControl设计器设计器中左边导航部分Views是用于设计gridControl的布局,Columns是用于设计gridControl中列,列属性中的Name是指列明,FileName是指对应的数据库字段(实体类、BaseValue)的名称,Caption是指定列标题显示文本(类似TextBox中的Text属性)。
Appearances是设计控件的外观样式。
注:options(选项)下的属性用于设置页面布局。
gridControl绑定DevExpress中的控件绑定数据源时,都不需要调用DataBind()方法。
this.gridControl1.DataSource = getGoodsInfo.GetGoodsInfoDT(typeId); 注:使用泛型集合绑定数据源,在GridView中实现自动添加行时,AddNewRow()方法不起效。
在获取数据行时,GetDataRow()方法报错。
如果使用gridcontrol用于只呈现数据可以使用泛型集合作为数据源,如果涉及到增、删、改建议使用DataTable作为数据源,这样以上两个方法可以正常使用。
gridControl实现自动添加行this.gridView1.AddNewRow(); //only one line codegridControl获取修改行的数据gridControl常用函数介绍GetDataRow() 用于获取指定索引的行。
GetFocusedRowCellValue() 获取鼠标选中行的某列值。
GetRowCellValue() 获取某行某列的值。
关于XtraGrid的使用(GridControl小结)DevExpress XtraGrid的使用(AspxGridControl小结)收藏自定义焦点行的方法gridView_bcode.FocusedRowHandle = focuseRowInt; //通过设置GridView 的FocusedRowHandle属性view plaincopy to clipboardprint?获取焦点行任意单元格的数据ColumnView cv = (ColumnView)gridControl_Gongzi.FocusedView;//重新获取此ID 否则无法从表头连删获取不到idint focusedhandle = cv.FocusedRowHandle;object rowIdObj = gridView1.GetRowCellValue(focusedhandle, "id");if (DBNull.Value != rowIdObj){FocusedRow_id = Convert.ToInt32(rowIdObj);}获取焦点行任意单元格的数据ColumnView cv = (ColumnView)gridControl_Gongzi.FocusedView;//重新获取此ID 否则无法从表头连删获取不到idint focusedhandle = cv.FocusedRowHandle;object rowIdObj = gridView1.GetRowCellValue(focusedhandle, "id");if (DBNull.Value != rowIdObj){FocusedRow_id = Convert.ToInt32(rowIdObj);}view plaincopy to clipboardprint?当数据发生变化时执行private void gridView1_CellValueChanged(object sender, CellValueChangedEventArgs e){int intRowHandle = e.RowHandle;FocusedRow_bumen =Convert.ToString(gridView1.GetRowCellValue(intRowHandle, "bumen"));FocusedRow_xingming =Convert.ToString(gridView1.GetRowCellValue(intRowHandle, "xingming"));//FocusedRow_jibengongzi =Convert.ToDecimal(gridView1.GetRowCellValue(intRowHandle, "jibengongzi"));object rowJibengongziObj = gridView1.GetRowCellValue(intRowHandle, "jibengongzi");if (DBNull.Value != rowJibengongziObj){FocusedRow_jibengongzi = Convert.ToDecimal(rowJibengongziObj);}}当数据发生变化时执行private void gridView1_CellValueChanged(object sender, CellValueChangedEventArgs e){int intRowHandle = e.RowHandle;FocusedRow_bumen =Convert.ToString(gridView1.GetRowCellValue(intRowHandle, "bumen"));FocusedRow_xingming =Convert.ToString(gridView1.GetRowCellValue(intRowHandle, "xingming"));//FocusedRow_jibengongzi =Convert.ToDecimal(gridView1.GetRowCellValue(intRowHandle, "jibengongzi"));object rowJibengongziObj = gridView1.GetRowCellValue(intRowHandle, "jibengongzi");if (DBNull.Value != rowJibengongziObj){FocusedRow_jibengongzi = Convert.ToDecimal(rowJibengongziObj);}} view plaincopy to clipboardprint?设置焦点行的焦点单元格的位置ColumnView view = (ColumnView)gridControl_Gongzi.FocusedView;view.FocusedColumn = view.Columns["bumen"];设置焦点行的焦点单元格的位置ColumnView view = (ColumnView)gridControl_Gongzi.FocusedView;view.FocusedColumn = view.Columns["bumen"]; view plaincopy to clipboardprint?当焦点行发生改变时执行获取选中焦点行idprivate void gridView1_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e){int intRowHandle = e.FocusedRowHandle;object rowIdObj = gridView1.GetRowCellValue(intRowHandle, "id");if (DBNull.Value != rowIdObj)//做个判断否则获取不到id后报错{FocusedRow_id = Convert.ToInt32(rowIdObj);}}当焦点行发生改变时执行获取选中焦点行idprivate void gridView1_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e){int intRowHandle = e.FocusedRowHandle;object rowIdObj = gridView1.GetRowCellValue(intRowHandle, "id");if (DBNull.Value != rowIdObj)//做个判断否则获取不到id后报错{FocusedRow_id = Convert.ToInt32(rowIdObj);}}view plaincopy to clipboardprint?焦点行的FocusedHandleFocuseRow_Handle = -999998;获取焦点行的handleColumnView newview = (ColumnView)gridControl_Gongzi.FocusedView;FocuseRow_Handle = newview.FocusedRowHandle;回车添加新行private void gridView1_KeyPress(object sender, KeyPressEventArgs e){if (e.KeyChar == 13){ColumnView view = (ColumnView)gridControl_Gongzi.FocusedView;if(view.IsLastRow){if (FocuseRow_Handle == 0){gridView1.AddNewRow();ColumnView newview =(ColumnView)gridControl_Gongzi.FocusedView;newview.FocusedColumn = newview.Columns["bumen"];//定位焦点网格的位置FocuseRow_Handle = newview.FocusedRowHandle;//获取新焦点行的FocuseRowHandle 并初始化全局变量FocuseRow_Handle供保存操作时判断是update还是insertGridcontrol的作用笔记girdView在第一列显示行号调整第一列的宽度this.gridView1.IndicatorWidth = 40;添加监听事件this.gridView1.CustomDrawRowIndicator += newDevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventHandler(thi s.gridView1_CustomDrawRowIndicator);//在非类里这段代码private void gridView1_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)...{if (.IsRowIndicator && e.RowHandle >= 0)...{.DisplayText =Convert.ToString(Convert.ToInt32(e.RowHandle.ToString())+1);}}private void mnuLoad_Click(object sender, System.EventArgs e){// TODO: Load CustomersDatabase db = null;db = DatabaseFactory.CreateDatabase();DataSet ds = db.ExecuteDataSet(CommandType.Text,"SELECT ID,Name,Age From UserInfo");gridControl1.DataSource = ds.Tables[0];设置成一次选择一行,并且不能被编辑this.gridView1.FocusRectStyle =DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFocus;this.gridView1.OptionsBehavior.Editable = false;this.gridView1.OptionsSelection.EnableAppearanceFocusedCell = false;设置列的标题gridView1.Columns[0].Caption = "编号";gridView1.Columns[1].Caption = "名称";gridView1.Columns[2].Caption = "年龄";设置列的名称,便于进行分组和Foot的统计等信息显示gridView1.Columns[0].Name = "ID";gridView1.Columns[1].Name = "Name";gridView1.Columns[2].Name = "Age";增加一个Group列进行分组this.gridView1.GroupSummary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] {newDevExpress.XtraGrid.GridGroupSummaryItem(DevExpress.Data.SummaryIte mType.Count, "ID", null, "(Count={0})")});增加一个Group列进行分组this.gridView1.GroupSummary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] {newDevExpress.XtraGrid.GridGroupSummaryItem(DevExpress.Data.SummaryIte mType.Max , "Age", null, "(Max={0})")});设置并制作Foot下面的统计信息this.gridView1.GroupFooterShowMode =DevExpress.XtraGrid.Views.Grid.GroupFooterShowMode.VisibleAlways;this.gridView1.OptionsView.ShowFooter = true;gridView1.Columns[2].SummaryItem.DisplayFormat = "(Age={0})";gridView1.Columns[2].SummaryItem.FieldName = "Age";gridView1.Columns[2].SummaryItem.SummaryType = DevExpress.Data.SummaryItemType.Sum;}设置成cardview格式private void menuItem2_Click(object sender, EventArgs e){gridControl1.MainView = this.cardView1;}设置成GridView格式private void menuItem4_Click(object sender, EventArgs e){gridControl1.MainView = this.gridView1 ;}自己模仿着写吧,相信大家很快都会成为高手的。
GridControl详解GridView插件所在位置使用时拖拽过来,如下所示即使拖拽过来原封不动的样子:1.原汁原味的表格展示我们在程序中写入构建一个表格的代码:private DataTable InitDt(){DataTable dt = new DataTable("个人简历");dt.Columns.Add("id",typeof(int));dt.Columns.Add("name", typeof(string));dt.Columns.Add("sex", typeof(int));dt.Columns.Add("address", typeof(string));dt.Columns.Add("aihao", typeof(string));dt.Columns.Add("photo", typeof(string));dt.Rows.Add(new object[] { 1, "张三", 1, "东大街6号", "看书", "" });dt.Rows.Add(new object[] { 1, "王五", 0, "西大街2号", "上网,游戏", "" });dt.Rows.Add(new object[] { 1, "李四", 1, "南大街3号", "上网,逛街", "" });dt.Rows.Add(new object[] { 1, "钱八", 0, "北大街5号", "上网,逛街,看书,游戏", "" });dt.Rows.Add(new object[] { 1, "赵九", 1, "中大街1号", "看书,逛街,游戏", "" });return dt;}书写gridControl1绑定数据方法:private void BindDataSource(DataTable dt){//绑定DataTablegridControl1.DataSource = dt;//绑定DataSet//gridControl1.DataSource = ds;//gridControl1.DataMember = "表名";}程序调用:BindDataSource(InitDt());呈现结果如下:2.表格的列名配置点击gridControl1控件上的按钮,弹出视图设计窗口:列配置:我们配置完列名后,会发现设计视图发生了变化:运行结果:3.列数据的格式设置为了测试方便,我们加入新的3列,格式分别是数据,时间,字符串。
代码增加下列部分://格式增加dt.Columns.Add("数据", typeof(decimal));dt.Columns.Add("时间", typeof(DateTime));dt.Columns.Add("自定义", typeof(string));dt.Rows.Add(new object[] { 1, "张三", 1, "东大街6号", "看书", "", -52.874, "2011-8-5 17:52:55","###" });dt.Rows.Add(new object[] { 1, "王五", 0, "西大街2号", "上网,游戏", "", -37.257, "2011-8-517:52:55" });dt.Rows.Add(new object[] { 1, "李四", 1, "南大街3号", "上网,逛街", "", -54.254, "2011-8-917:52:55" });dt.Rows.Add(new object[] { 1, "钱八", 0, "北大街5号", "上网,逛街,看书,游戏", "", -35.127, "2011-8-9 17:52:55" });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存在事件:自定义列显示事件增加事件:private void gridView1_CustomColumnDisplayText(object sender,DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e) {if (e.Column.FieldName == "sex"){switch (e.Value.ToString().Trim()){case"1":e.DisplayText = "男";break;case"0":e.DisplayText = "女";break;default:e.DisplayText = "";break;}}}显示结果:4.分组排序汇总分组:按时间分第一组:按性别分第二组:显示结果:高级设置:将所有组展开代码:gridView1.ExpandAllGroups();显示结果:自定义组名,GridView级事件增加事件:private void gridView1_CustomDrawGroupRow(object sender, DevExpress.XtraGrid.Views.Base.RowObjectCustomDrawEventArgs e){GridGroupRowInfo GridGroupRowInfo = as GridGroupRowInfo;GridGroupRowInfo.GroupText = "第" + (e.RowHandle).ToString() + "行" + GridGroupRowInfo.EditValue.ToString();}显示结果:注意:每一行都有一个RowHandle属性,普通行的RowHandle为非负整数,从0开始;组行为负整数,从-1开始。
排序:排序设置显示结果:汇总:汇总数据列设置注意:汇总结果是显示在Footer面板中的,gridControl中的Footer面板默认是不显示的,所以如果要汇总数据,那么必须先设置Footer面板显示。
显示结果:组计:代码:gridView1.GroupSummary.Add(DevExpress.Data.SummaryItemType.Sum, "数据", gridColumn7, "组计:{0}");结果显示5.设置行备注和行号备注显示设置设置备注字段显示结果:可以写入按键事件F3,用以开关备注显示private void Form4_KeyUp(object sender, KeyEventArgs e){if (e.KeyCode == Keys.F3){gridView1.OptionsView.ShowPreview = !gridView1.OptionsView.ShowPreview;}}行号显示要用到的事件:代码:private void gridView1_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e) {if (.IsRowIndicator){.DisplayText = "Row " + e.RowHandle.ToString();}}gridView1.IndicatorWidth = 70;显示结果6.样式设置表格样式:全局设置例子:例子:列样式:只作用于当前的列通用样式:外观设定注意:样式设定都是相同的,Appearance前缀。
7.事件private void gridView1_RowCellClick(object sender, DevExpress.XtraGrid.Views.Grid.RowCellClickEventArgs e) {if (e.Button == MouseButtons.Left){//鼠标的那个按钮按下}if (e.Clicks == 2){//鼠标点击次数}if (e.Delta > 0){//鼠标滚轮滚动方向}if (e.X > 0 & e.Y > 0){//鼠标的坐标}if (e.RowHandle > 0){//点击的行号}if (e.CellValue != null){//点击的单元格中的值}if (e.Column != null){//点击的单元格所属列信息}}private void gridView1_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e) {if (e.Button == MouseButtons.Left){//鼠标的那个按钮按下}if (e.Clicks == 2){//鼠标点击次数}if (e.Delta > 0){//鼠标滚轮滚动方向}if (e.X > 0 & e.Y > 0){//鼠标的坐标}if (e.RowHandle > 0){//点击的行号}}。