XtraGrid使用心得.doc_第1页
XtraGrid使用心得.doc_第2页
XtraGrid使用心得.doc_第3页
XtraGrid使用心得.doc_第4页
XtraGrid使用心得.doc_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

XtraGrid使用心得XtraGrid的关键类就是:GridControl和GridView。GridControl本身不显示数据,数据都是显示在 GridView/CardView/XXXXView中。GridControl是各种View的容器。所以要控制显示,要从GridView这些类入 手。关于GridControl与GridView的关系,我不说了。下面给出一段代码。实际使用中常用到。 public Form2() InitializeComponent(); /不显示内置的导航条。 gc1.UseEmbeddedNavigator = false; /不显示分组的面板 gv1.OptionsView.ShowGroupPanel = false; gv2.OptionsView.ShowGroupPanel = false; /自动改变行高适应内容 gv1.OptionsView.RowAutoHeight = true; gv2.OptionsView.RowAutoHeight = true; /允许自动合并单元格 gv1.OptionsView.AllowCellMerge = true; /如果主从表中,没有找到从表内容也要显示(默认是不显示的) gv1.OptionsDetail.AllowExpandEmptyDetails = true; /显示自动筛选行(效果跟Excel的自动筛选差不多) gv2.OptionsView.ShowAutoFilterRow = true; /使得GridView不能编辑 gv1.OptionsBehavior.Editable = false; gv2.OptionsBehavior.Editable = false; /内置编辑器显示的模式 gv1.OptionsBehavior.EditorShowMode = DevExpress.Utils.EditorShowMode.Click; /主从表显示的功能是否可用 /gv1.OptionsDetail.EnableMasterViewMode = false; /如果显示了主从表,每点开个加号,就会显示一个Tabs,里面往往显示了两个面板。 /事实上没必要这样干的。一般选择关闭。关闭的对象是主GridView的此项属性。 gv1.OptionsDetail.ShowDetailTabs = false; private void btnExit_Click(object sender, EventArgs e) this.Close(); private void btnOk_Click(object sender, EventArgs e) /设置连接字符串 DbHelperSQL.ConnectionString = DbHelperSQL.CreateConnectionString(BUDDHASSQLEXPRESS, sa, 00000, RTDMES); DataSet ds = new DataSet(); /父GridView的数据 string sql = select sc_prno,sc_prna from mespb04h; DbHelperSQL.QueryD(sql,ds,main); /子GridView的数据 sql = select pa_name,pa_no,sc_prno from mespb09h; DbHelperSQL.QueryD(sql,ds,son); /这个是显示主从表的关键,一、GridControl通过检查DataSet.Relations的内容来分析数据 /二、关键名必须与设计GridView的层级关系的level name相同,否则,结果在意料之外。 DataRelation relation = new DataRelation(aa, ds.Tablesmain.Columnssc_prno, ds.Tablesson.Columnssc_prno); ds.Relations.Add(relation); /这也是一个关键,不能直接设为:ds,必须指明到表。 gc1.DataSource = ds.Tablesmain; 上面的代码是显示一个主从表。显示主从表有些技巧。文档中还没有说出来,俺摸索了一个晚上才搞出来。像上面看到的,事实上很简单。上面DbHelperSQL是我从CodeMatic 2.0中搞出来的,我自己修改了一下。上面代码的效果图如下:对于GridView,我有两大疑问:一、显示主从表,这个解决了。二、分组显示,这是报表中经常要用到的,GridView的解决方案很简捷,只需将相应列的GroupIndex属性设一下就成了。点此处见详情。为XtraGrid的GridView加行号。示例代码如下: /设置行指示器的宽度(行指示器就是最左边那列什么都不显示的列)/默认情况下,如果要在里面显示行号的话,宽度会不足,数字显示不清晰/所以要改一下宽度gv1.IndicatorWidth = 20;private void gv1_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e) if (e.Info.IsRowIndicator & e.RowHandle = 0) e.Info.DisplayText = (e.RowHandle + 1).ToString().Trim(); 效果图如下:常用代码:/添加分组统计字段gridView1.GroupSummary.Add(SummaryItemType.Count, Product Name, gridView1.ColumnsProduct Name);gridView1.GroupSummary.Add(SummaryItemType.Average, Unit Price, gridView1.ColumnsUnit Price);/设置分组统计字段的显示格式(GridSummaryItem)gridView1.GroupSummarygridView1.GroupSummary.Count - 1).DisplayFormat = AVR=0:c;/设置分组字段gridView1.ColumnsDiscontinued.GroupIndex = 0;/打开所有分组gridView1.ExpandAllGroups();/为控件画边框ControlPaint.DrawBorder3D(e.Graphics, r, (e.Info.State = DevExpress.Utils.Drawing.ObjectState.Pressed ? Border3DStyle.SunkenOuter : Border3DStyle.RaisedInner);/焦点单元格的列gridview1.FocusedColumn/焦点单元格所在行的行号gridview1.FocusedRowHandle/焦点单元格的值gridview1.FocusedValue/指定单元格显示的字符串值gridview1.GetRowCellDisplayText(int rowHandler,string feildName)/指定单元格的值gridview1.GetRowCellValue(int rowHandler,string feildName)/设置焦点单元格所在行指定列的值gridview1.SetFocusedRowCellValue(GridColumn col,object value)/设置焦点单元格的值gridview1.SetFocusedValue(object value)/设置指定单元格的值/有了这个函数,就可以手工创建行了。gridview1.SetRowCellValue(int rowHandler,string feildName,object value)gridview1.SetRowCellValue(int rowHandler,GridColumn col,object value)/添加新行的方法gv1.AddNewRow();foreach (GridColumn col in gv1.Columns)/用RowCount-1的办法是不行的/gv1.SetRowCellValue(gv1.RowCount-1, col, aaaaa);gv1.SetRowCellValue(gv1.FocusedRowHandle, col, aaaaa);gv1.UpdateCurrentRow();/根据绑定的数据源自动产生列gv1.PopulateColumns();/为列添加下拉列表(加其他类型如日期、UpDown同理)RepositoryItemLookUpEdit ri = new RepositoryItemLookUpEdit();/ri.PopupWidth = 200;ri.DisplayMember = sc_prna;ri.ValueMember = sc_prno;DataTable dt1 = DbHelperSQL.QueryT(select sc_prno,sc_prna from mespb04h);ri.DataSource = dt1;gv1.Columnssc_prno.ColumnEdit = ri;开发商明确XtraGrid使用技巧 1.基本栅格的用法1.1 gridControl-view-gridView 绑定到栅格上的字段可以拖动删除,在任意字段上右键点专栏选举人可以将删除的字段添加进来字段上右键选择实现选定需要的信息和排序字段上右键选择分组(小组 专栏),也可以直接将字段拖到上面实现分组由箱子后可以取消分组栏, (不能实现拖动分组,但可以选择分组)的字段上右键选择小组字段上右键选择最好适合的可以实现该字段最佳宽度(便于查看)1.2 gridControl-view-cardView以卡片形式存放数据可以自己设定过滤选项1.3 gridControl-view-banderGridView将字段分段显示,前提是给gridControl先绑定一个数据集动态绑定的时候不能分段,也不能分行1.3 gridControl-view-advBanderGridView高级分段显示,动态绑定的字段可以在前台向下拖动后分段,但效果不好,相当于分行显示的样子1.4 可以通过创造ner视图增加一个视图,但程序只显示你选定的视图徒升的使用 快速上升,也就是选择子项后单独显示(上到最高显示)1.5特点浏览器-priview 可以指定在每行中预览的字段-filtering的可以自动过滤(optingview.showAutoFiterRow)1.7大师细节绑定的问题首先在gridControl1中指定数据来源的绑定是主表然后在平实设计器中添加层(检索细节)最后用代码绑定:使用(SqlConnection骗局=新的SqlConnection (SqlHepler.CONN_STRING) /SqlDataAdapter sda1 =新的SqlDataAdapter (“精选*从命令”,骗局); /sda1.Fill (this.northwindDataSet.Orders); SqlDataAdapter sda2 =新的SqlDataAdapter (“精选*从命令细节”,骗局); sda2.Fill (this.northwindDataSet.Order_Details); 1.8总结的用法 GridOptionsView.ShowFooter选择设置/If, /the总结(当然能)可以在步行者细胞之内被显示。 gridView1.OptionsView.ShowFooter =配齐; /初始化,也可以不用指定 colOrderID.SummaryItem.FieldName = “OrderID”; colOrderID.SummaryItem.SummaryType = DevExpress.Data.SummaryItemType.Count;2.XtraGrid的打印借用别人写的一个类类DevPrint / *字段* 私有串pageHeaderName= ; 私有串pageFooterName= ; 私有bool isPrintPage=true; 私有bool isPrintDate=true; 私有int headerLocation=1; 私有int footerLocation=1; 私有int pageLocation=3; 私有int dateLocation=5; 私有bool enableEditPage =配齐; 私有System.Drawing.Font pageHeaderFont =零位; 私有System.Drawing.Font pageFooterFont =零位; 私有System.Drawing.Printing.Margins devMargins =零位; 私有System.Drawing.Printing.PaperKind devPaperKind = System.Drawing.Printing.PaperKind.A4; /可以自定义修改纸张 私有DevExpress.XtraPrinting.PageHeaderArea PHA =新的DevExpress.XtraPrinting.PageHeaderArea (); 私有DevExpress.XtraPrinting.PageFooterArea PFA =新的DevExpress.XtraPrinting.PageFooterArea (); / *字段* / *属性* /标题 公开串PageHeaderName 得到 退回pageHeaderName; 设置 pageHeaderName=value; /页脚 公开串PageFooterName 得到 退回pageFooterName; 设置 pageFooterName =价值; /是否打印页数 公开bool IsPrintPage 得到 退回isPrintPage; 设置 isPrintPage =价值; /是否打印时间 公开bool IsPrintDate 得到 退回isPrintDate; 设置 isPrintDate =价值; /header的位置(左,中,右) 公众int HeaderLocation 得到 退回headerLocation; 设置 headerLocation=value; /footer的位置(左,中,右) 公众int FooterLocation 得到 退回footerLocation; 设置 footerLocation=value; /页数的位置 公众int PageLocation 得到 退回pageLocation; 设置 pageLocation=value; /时间的位置 公众int DateLocation 得到 退回dateLocation; 设置 dateLocation=value; /是否允许编辑页面 公开bool EnableEditPage 得到 退回enableEditPage; 设置 enableEditPage =价值; /标题字体 公众System.Drawing.Font PageHeaderFont 得到 退回pageHeaderFont; 设置 pageHeaderFont =价值; /页脚字体 公众System.Drawing.Font PageFooterFont 得到 退回pageFooterFont; 设置 pageFooterFont =价值; /页边距 公众System.Drawing.Printing.Margins DevMargins 得到 退回devMargins; 设置 devMargins =价值; /纸张类型 公众System.Drawing.Printing.PaperKind DevPaperKind 得到 退回devPaperKind; 设置 devPaperKind =价值; / *字段* 私有空PageHeaderFooterSettings () PHA.Content.Clear (); PFA.Content.Clear (); 串 stringsPHA =新的串 、, ; 串起 stringsPFA =新的串 、, ; 交换(headerLocation) 案例0 :stringsPHA 0 =pageHeaderName; 断裂; 案例1 :stringsPHA 1 =pageHeaderName; 断裂; 案例2 :stringsPHA 2 =pageHeaderName; 断裂; 缺省:stringsPHA 1 =pageHeaderName; 断裂; ; 交换(footerLocation) 案例0 :stringsPFA 0 =pageFooterName; 断裂; 案例1 :stringsPFA 1 =pageFooterName; 断裂; 案例2 :stringsPFA 2 =pageFooterName; 断裂; 缺省:stringsPFA 1 =pageFooterName; 断裂; ; 如果(isPrintPage) 交换(pageLocation) 案例0 :stringsPHA 0 =stringsPHA 0 + 页#页# “; 断裂; 案例1 :stringsPHA 1 =stringsPHA 1 + 页#页# “; 断裂; 案例2 :stringsPHA 2 =stringsPHA 2 + 页#页# “; 断裂; 案例3 :stringsPFA 2 =stringsPFA 2 + 页#页# “; 断裂; 案例4 :stringsPFA 1 =stringsPFA 1 + 页#页# “; 断裂; 案例5 :stringsPFA 0 =stringsPFA 0 + 页#页# “; 断裂; 缺省:stringsPFA 2 =stringsPFA 2 + 页#页# “; 断裂; ; 如果(isPrintDate) 交换(dateLocation) 案例0 :stringsPHA 0 =stringsPHA 0 + 打印的日期 “; 断裂; 案例1 :stringsPHA 1 =stringsPHA 1 + 打印的日期 “; 断裂; 案例2 :stringsPHA 2 =stringsPHA 0 + 打印的日期 “; 断裂; 案例3 :stringsPFA 2 =stringsPFA 2 + 打印的日期 “; 断裂; 案例4 :stringsPFA 1 =stringsPFA 1 + 打印的日期 “; 断裂; 案例5 :stringsPFA 0 =stringsPFA 0 + 打印的日期 “; 断裂; 缺省:stringsPFA 0 =stringsPFA 0 + 打印的日期 “; 断裂; ; PHA.Content.AddRange (stringsPHA); PFA.Content.AddRange (stringsPFA); 如果(pageHeaderFont! =零位) 尝试 PHA.Font = pageHeaderFont; 抓住 PHA.Font =新的字体(新的System.Drawing.FontFamily (“楷体_GB2312”), 20, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); PHA.Font =新的字体(新的System.Drawing.FontFamily (“楷体_GB2312”), 20, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); 如果(pageFooterFont! =零位) 尝试 PFA.Font = pageFooterFont; 抓住 PFA.Font =新的字体(新的System.Drawing.FontFamily (“楷体_GB2312”), 9, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); 公众空ShowDevPreview (printComponent的DevExpress.XtraPrinting.IPrintable) PageHeaderFooterSettings (); DevExpress.XtraPrinting.PrintingSystem ps =新的DevExpress.XtraPrinting.PrintingSystem (); DevExpress.XtraPrinting.PrintableComponentLink个人计算机=new DevExpress.XtraPrinting.PrintableComponentLink (); 个人计算机。组分= printComponent; 个人计算机。风景=配齐; /是否指定页边距尺寸 如果(devMargins! =零位) 个人计算机。边际= devMargins; /是否定义纸张 如果(devPaperKind! = System.Drawing.Printing.PaperKind.A4) pc.PaperKind = devPaperKind; /标题和页脚的显示 pc.PageHeaderFooter = 新的DevExpress.XtraPrinting.PageHeaderFooter (PHA, PFA); pc.CreateDocument (ps); pc.EnablePageDialog = enableEditPage; pc.ShowPreview (); WinForm中使用XtraGrid控件,实现在界面中动态修改列显示,列名列宽在使用XtraGrid的gridControl或DataGridView中,里面栏目的设置比较麻烦。为此我找出了一个比较简便的解决方法。大致思路如下:定义一个和表结构类似的XML文件,保存表字段的显示标题、是否显示、宽度等信息,在GridControl显示的时候,直接读取这些信息。再在工具条中加上栏目设置的功能。具体实现步骤:1. 当然使用传说中的CodeSmith生成XML文件,CodeSmith模板代码如下:public string GetSqlParameterStatement(ColumnSchema column) string param = ; switch (column.DataType) case DbType.Decimal: param += ( + column.Precision + , + column.Scale + ); break; case DbType.Boolean:case DbType.Int32:case DbType.DateTime:case DbType.Double:case DbType.Single:case DbType.Byte:case DbType.Int64:case DbType.Int16:break; default: if (column.Size 0) param += ( + column.Size + ); break; return param;DataBase(Tables:)Author: Date:% for(int i=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论