CXTPReportControl控件教程
- 格式:doc
- 大小:150.50 KB
- 文档页数:12
CGridCtrl学习指南当我努力为显示和编辑现有表中的数据而使用CListCtrl 到了极限之后,我意识到我所需要的只不过是一个专用的Grid控件而已。
于是我开始着手写自己的Grid控件,但为了节省时间我决定修改Joe Willcoxson's 的免费控件WorldCom,你可以在以下站点/chinajoe/wcmfclib.html 找到这个东东。
为了让它能做我要做的事情,我分解了他的代码,并且重新修改。
由于代码经过太多的修改,我甚至不能确信最终是否还存在最初的代码。
但无论如何,Joe的代码是一个大框架,而我只是在上面进行加工而已。
工程一开始的时候是计划尽可能的简单但是当我不断发现我不得不考虑新特色的时候,它迅速的膨胀成为一个梦魇。
虽然测试并不是没有遗漏--但是我还是坚信情形不会变得太坏J。
Joe很善意的允许我开放这个资源而不附加任何的语句(毕竟那是基于他的代码),但是由于工程象马拉松似的,所以我在这段代码中使用了两个非常不成熟的条件:这段代码可以以任何方式用于已编译的形式中(包括商业用途)。
只要代码不适用,即使没有作者同意,作者姓名和所有版权信息都原封不动,你可以对代码进行任何形式的使用。
但是,如果没有作者的同意,这篇文章和附带的源代码都不能放在任何网站或论坛上。
你就把它当作是没有任何担保的软件,随意使用吧!我已经尽量除去任何不良的" 特征",对由它引起的任何损害,时间的浪费或者数据丢失等,我不负任何责任。
希望不要问太多关于继续开发下去的到底有多大工作量的问题。
如果你真的要用于商业场合,请给我发email让我知道。
如果没有多少人使用的话,开放和维护/升级代码就没有任何意义。
</P><P>控件的特点:●使用鼠标可以进行单元格的选择,还可以辅助ctrl和shift的组合键进行选择。
也可以取消选择。
●行和列可以按照大小进行重排,还可以取消对行、列或两者的排序。
xtrareport的使用方法XtraReports是一个功能强大的报表生成工具,支持用于跨平台应用程序的可视化报表设计和生成。
它可以帮助开发人员快速创建各种格式和类型的报表,包括表格、图表、交叉表、子报表等。
1. 安装和配置XtraReports- 在项目中添加对DevExpress报表组件的引用。
- 在需要使用XtraReports的代码文件中添加DevExpress.XtraReports.UI命名空间。
2.创建报表- 在Visual Studio中,右键单击项目,选择Add -> New Item。
- 在模板列表中选择DevExpress v19.2 Report,并设置报表的名称。
-在报表设计器中,可以使用工具箱中的控件和工具来设计报表的布局和样式。
也可以通过代码方式来创建和修改报表。
-将需要展示的数据源绑定到报表上,可以使用数据适配器、实体对象集合、数据库查询等方式。
-可以设置报表的标题、页眉、页脚、分组和汇总等部分,并根据需要插入控件和公式。
3.样式和布局-可以通过报表设计器提供的属性面板来设置报表的样式,如字体、颜色、边框、背景等。
-可以自定义报表的布局,调整控件的位置和大小,设置控件的属性和事件。
4.数据绑定和数据操作-报表可以使用多种数据源,如数据适配器、数据集、实体对象集合等。
-可以使用绑定表达式将数据源中的字段绑定到报表中的控件,实现数据的展示和操作。
-可以使用公式和函数来对报表数据进行计算和格式化。
5.生成和导出报表- 可以在代码中使用报表对象的Print方法来生成报表,并在运行时显示在报表预览窗口中。
- 可以将报表输出为多种格式,如PDF、Excel、HTML、图片等。
可以使用报表对象的ExportTo方法来导出报表。
6.高级功能和扩展- XtraReports提供了许多高级功能和扩展,如报表参数、条件格式、子报表、钻取式报表、交叉表等。
-可以使用报表设计器和代码来实现这些功能,以满足具体的业务需求。
本文是为了帮助初次接触DevExpress XtraReports报表的人群使用而整理的。
本文内容参考自DevExpress XtraReports帮助文档。
本次内容分如下4个步骤:∙创建应用程序并添加报表∙构建报表∙输出报表∙查看运行结果一、创建应用程序1、启动MS Visual Studio (2005、2008或2010)。
2、新建一个Windows 窗体应用程序(或者在Visual Studio 2005 中新建Windows 应用程序)。
3、在项目菜单中,选择添加新项... (或按下CTRL+SHIFT+A 组合键) 来调用添加新项对话框。
4、在此对话框中,选择XtraReport Class v10.2 项,并且单击添加按钮。
这样将把一个空白新报表添加到应用程序中。
注意也可以选择XtraReport Wizard v10.2 项来调用报表向导,此向导可以帮助您快速创建标准报表。
二、构建报表∙现在Visual Studio 显示了新建报表的设计器(在默认情况下,报表名称是XtraReport1,并且在本课程中将使用此名称)。
注意,此报表派生于XtraReport 类,该类是所有报表的基本类。
您可以发现,这种行为与新建派生于Form 类的窗体的结果相类似。
(为了继续进行报表创建,打开工具箱窗格(例如通过按下CTRL+ALT+X 组合键),然后选中XRLabel 控件(在DX.10.2: Report Controls 标签页中),并且把它拖放到报表的Detail 带区)。
∙双击所创建的标签,调用它的允许输入文本的内置编辑器。
例如,键入经典的Hello World! 语句。
然后使用XtraReports 工具栏来调整标签的颜色及字体选项。
∙现在切换到预览标签页(通过报表设计器底部的Preview 按钮)。
同样,如果需要查看此报表的HTML 外观如何,则切换到HTML View 标签页。
三、输出报表∙现在切换到Form1 的设计器,并且在窗体中添加三个System.Windows.Forms.Button 控件。
Xtrareport1,此报表在设置时,paperkind中找不到自定义的纸张,所以我就在事件beforeprint中,this.Margins = new System.Drawing.Printing.Margins(10, 10, 10, 10);this.PaperKind = System.Drawing.Printing.PaperKind.Custom;this.PageWidth = 827;this.PageHeight = 584;this.PaperName = "21*13"2.加载已有模板xrpt1.LoadLayout(@"E:\EMS.repx");Developer Express 之XtraReport报表预览控件PrintControl设置using System;02 using System.Collections.Generic;03 using ponentModel;04 using System.Data;05 using System.Drawing;06 using System.Text;07 using System.Windows.Forms;08 using DevExpress.XtraEditors;09 using DevExpress.XtraReports.UI;10 using DevExpress.XtraPrinting.Preview;11 using DevExpress.XtraPrinting;12 using DevExpress.XtraPrinting.Control;1314 namespace WFAXtraReport15 {16 public partial class Form1 : Form17 {18 public Form1 ()19 {20 InitializeComponent();21 }2223 private void Form1 _Load(object sender, EventArgs e) 24 {2526 XtraReport fXtraReport = new XtraReport();27 //fXtraReport.LoadLayout(@"C:\1.repx");2829 PrintControl printControl1 = new PrintControl(); 30 printControl1.PrintingSystem = fXtraReport.PrintingSystem;313233 PrintBarManager printBarManager = new PrintBarManager();34 printBarManager.Form = printControl1;35 printBarManager.Initialize(printControl1);36 printBarManager.MainMenu.Visible = false;37 printBarManager.AllowCustomization = false;3839 //操作要显示什么按钮40 printControl1.PrintingSystem.SetCommandVisibility(new P rintingSystemCommand[]{41 PrintingSystemCommand.Open,42 PrintingSystemCommand.Save,43 PrintingSystemCommand.ClosePreview,44 PrintingSystemCommand.Customize,45 PrintingSystemCommand.SendCsv,46 PrintingSystemCommand.SendFile,47 PrintingSystemCommand.SendGraphic,48 PrintingSystemCommand.SendMht,49 PrintingSystemCommand.SendPdf,50 PrintingSystemCommand.SendRtf,51 PrintingSystemCommand.SendTxt,52 PrintingSystemCommand.SendXls53 }, CommandVisibility.None);5455 fXtraReport.CreateDocument();5657 Controls.Add(printControl1);58 printControl1.Dock = DockStyle.Fill;59 }60 }61 }关于XtraReport的功能还有很多,细节上的处理还有很多,留待以后再整理,先整理这几个常用的。
VCMFC之ListCtrl控件使用经验总结(转)以下未经说明,listctrl默认view 风格为report相关类及处理函数MFC:CListCtrl类SDK:以“ListView_”开头的一些宏。
如ListView_InsertColumn--------------------------------------------------------------------------------1. CListCtrl 风格LVS_ICON: 为每个item显示大图标LVS_SMALLICON: 为每个item显示小图标LVS_LIST: 显示一列带有小图标的itemLVS_REPORT: 显示item详细资料直观的理解:windows资源管理器,“查看”标签下的“大图标,小图标,列表,详细资料”--------------------------------------------------------------------------------2. 设置listctrl 风格及扩展风格LONG lStyle;lStyle = GetWindowLong(m_list.m_hWnd, GWL_STYLE);//获取当前窗口stylelStyle &= ~LVS_TYPEMASK; //清除显示方式位lStyle |= LVS_REPORT; //设置styleSetWindowLong(m_list.m_hWnd, GWL_STYLE, lStyle);//设置styleDWORD dwStyle = m_list.GetExtendedStyle();dwStyle |= LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrl)dwStyle |= LVS_EX_GRIDLINES;//网格线(只适用与report风格的listctrl)dwStyle |= LVS_EX_CHECKBOXES;//item前生成checkbox控件m_list.SetExtendedStyle(dwStyle); //设置扩展风格注:listview的style请查阅msdn/library/default.asp?url=/library/ en-us/wceshellui5/html/wce50lrflistviewstyles.asp--------------------------------------------------------------------------------3. 插入数据m_list.InsertColumn( 0, "ID", LVCFMT_LEFT, 40 );//插入列m_list.InsertColumn( 1, "NAME", LVCFMT_LEFT, 50 );int nRow = m_list.InsertItem(0, “11”);//插入行m_list.SetItemText(nRow, 1, “jacky”);//设置数据--------------------------------------------------------------------------------4. 一直选中item选中style中的Show selection always,或者在上面第2点中设置LVS_SHOWSELALWAYS--------------------------------------------------------------------------------5. 选中和取消选中一行int nIndex = 0;//选中m_list.SetItemState(nIndex, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);//取消选中m_list.SetItemState(nIndex, 0, LVIS_SELECTED|LVIS_FOCUSED);--------------------------------------------------------------------------------6. 得到listctrl中所有行的checkbox的状态m_list.SetExtendedStyle(LVS_EX_CHECKBOXES);CString str;for(int i=0; i<m_list.GetItemCount(); i++){if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED || m_list.GetCheck(i)){str.Format(_T("第%d行的checkbox为选中状态"), i);AfxMessageBox(str);}}--------------------------------------------------------------------------------7. 得到listctrl中所有选中行的序号方法一:CString str;for(int i=0; i<m_list.GetItemCount(); i++){if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED ) {str.Format(_T("选中了第%d行"), i);AfxMessageBox(str);}}方法二:POSITION pos = m_list.GetFirstSelectedItemPosition();if (pos == NULL)TRACE0("No items were selected!\n");else{while (pos){int nItem = m_list.GetNextSelectedItem(pos);TRACE1("Item %d was selected!\n", nItem);// you could do your own processing on nItem here}}--------------------------------------------------------------------------------8. 得到item的信息TCHAR szBuf[1024];LVITEM lvi;lvi.iItem = nItemIndex;lvi.iSubItem = 0;lvi.mask = LVIF_TEXT;lvi.pszText = szBuf;hTextMax = 1024;m_list.GetItem(&lvi);关于得到设置item的状态,还可以参考msdn文章Q173242: Use Masks to Set/Get Item States in CListCtrl/kb/173242/en-us--------------------------------------------------------------------------------9. 得到listctrl的所有列的header字符串内容LVCOLUMN lvcol;char str[256];int nColNum;CString strColumnName[4];//假如有4列nColNum = 0;lvcol.mask = LVCF_TEXT;lvcol.pszText = str;hTextMax = 256;while(m_list.GetColumn(nColNum, &lvcol)){strColumnName[nColNum] = lvcol.pszText;nColNum++;}--------------------------------------------------------------------------------10. 使listctrl中一项可见,即滚动滚动条m_list.EnsureVisible(i, FALSE);--------------------------------------------------------------------------------11. 得到listctrl列数int nHeadNum = m_list.GetHeaderCtrl()->GetItemCount();--------------------------------------------------------------------------------12. 删除所有列方法一:while ( m_list.DeleteColumn (0))因为你删除了第一列后,后面的列会依次向上移动。
软件工程研究所新控件报表使用方法版本号:13.2.6制作人:艾传波2014/11/23目录一、提前准备 (2)二、连接数据库 (3)三、拖入数据集 (5)四、报表控件使用 (6)4.1设置属性实现报表 (6)4.2通过动态编码实现报表 (17)一、提前准备以学生管理系统为例,数据库脚本如下:create table S(SNO VARCHAR2(3),SNAME VARCHAR2(10),SEX VARCHAR2(10),ADDRESS VARCHAR2(50),MAJOR VARCHAR2(50));insert into S (SNO, SNAME,SEX,ADDRESS,MAJOR) values ('1', '赵一','男','湖北大学三期公寓3037','计算机科学与技术');insert into S (SNO, SNAME,SEX,ADDRESS,MAJOR) values ('2', '钱二','男','湖北大学三期公寓1000','计算机科学与技术');insert into S (SNO, SNAME,SEX,ADDRESS,MAJOR) values ('3', '孙三','男','湖北大学三期公寓6890','计算机科学与技术');insert into S (SNO, SNAME,SEX,ADDRESS,MAJOR) values ('4', '李四','女','湖北大学三期公寓1234','软件工程');insert into S (SNO, SNAME,SEX,ADDRESS,MAJOR) values ('5', '王五','女','湖北大学三期公寓357','软件工程');insert into S (SNO, SNAME,SEX,ADDRESS,MAJOR) values ('6', '张六','女','湖北大学三期公寓7688','软件工程');create table C(CNO VARCHAR2(3),CNAME VARCHAR2(30),CTEACHER VARCHAR2(10));insert into C (CNO, CNAME, CTEACHER) values ('1', '语文', '语文老师');insert into C (CNO, CNAME, CTEACHER) values ('2', '数学', '数学老师');insert into C (CNO, CNAME, CTEACHER) values ('3', '英语', '英语老师');insert into C (CNO, CNAME, CTEACHER) values ('4', '历史', '历史老师');insert into C (CNO, CNAME, CTEACHER) values ('5', '地理', '地理老师');insert into C (CNO, CNAME, CTEACHER) values ('6', '生物', '生物老师');create table SC(SNO VARCHAR2(3),CNO VARCHAR2(3),SCGRADE NUMBER);insert into SC (SNO, CNO, SCGRADE) values ('1', '1', 11); insert into SC (SNO, CNO, SCGRADE) values ('1', '2', 12); insert into SC (SNO, CNO, SCGRADE) values ('1', '3', 13); insert into SC (SNO, CNO, SCGRADE) values ('1', '4', 14); insert into SC (SNO, CNO, SCGRADE) values ('1', '5', 15); insert into SC (SNO, CNO, SCGRADE) values ('1', '6', 16); insert into SC (SNO, CNO, SCGRADE) values ('2', '1', 21); insert into SC (SNO, CNO, SCGRADE) values ('2', '2', 22); insert into SC (SNO, CNO, SCGRADE) values ('2', '3', 23); insert into SC (SNO, CNO, SCGRADE) values ('3', '4', 34); insert into SC (SNO, CNO, SCGRADE) values ('3', '5', 35); insert into SC (SNO, CNO, SCGRADE) values ('3', '6', 36); insert into SC (SNO, CNO, SCGRADE) values ('4', '1', 41); insert into SC (SNO, CNO, SCGRADE) values ('4', '2', 42); insert into SC (SNO, CNO, SCGRADE) values ('5', '3', 53); insert into SC (SNO, CNO, SCGRADE) values ('5', '4', 54);二、连接数据库连接数据库测试连接成功后确定三、拖入数据集添加新项->数据集四、报表控件使用4.1设置属性实现报表首先添加新项DXperience Report Class置入App_Code文件夹中查看解决方案资源管理器,如下:双击打开XtraReport.cs文件在App_Code/XtraReport.cs[设计]页面内右击选择insert Band->{report head和page head}在ReportHeader中加入报表的标题,使用XRLabel(类似于网页中的label)设置XRLabel属性Name,Text,font—Size如下:将report绑定数据源在PageHeader中加入XRTable,右击设置自己所需要的列的个数,并在其属性中设好列名。
C++关于CMFCPropertyGridCtrl的使⽤⽅法之⼀(原创)题外话:最近在写⼀个重要的程序,想做的更灵活⼀些,于是想采⽤属于对话框的形式,如图所⽰但查了好⼏本⼤部门的C++及MFC的书,还有很多的⽹上的资料,这⽅⾯的介绍实在是少之⼜少。
不过,好在VS2013是半开源的。
哈哈,⾥抽的代码看不到,但是函数声明还是都能看到的。
这为我解决问题提供了⼀条好的⽅法,另外在线的 MSDN 也是⼀个很好的学习途径,不过,汉语翻译实在是不敢恭维,那叫⼀个烂,基本上看不懂,他说的是什么,只能啃英⽂。
所以说,学东西不容易,学会了,⼀定不要忘记总结,要不然,过段时间就忘记了,就很可惜了。
不说废话,⾔归正转⼀、关于 CMFCPropertyGridCtrl 与 CMFCPropertyGridProperty 是⼀对好兄弟,他们叫是结合使⽤。
不要看错了。
CMFCPropertyGridCtrl 是容器,他的⾥⾯包含若⼲ CMFCPropertyGridProperty 项⽬。
⽽ CMFCPropertyGridProperty 才是真正的项⽬内容。
⽽ CMFCPropertyGridProperty 神奇的地⽅是,他是可以嵌套的,⼀个属于套⼀个属性。
在我这个例⼦中,⿊⾊的外框,可以认为是 CMFCPropertyGridCtrl 容器,在我这个图⾥⾯,我添加了 5个顶级的属性。
如“概述”就是第⼀个顶级的属性,可以使⽤ CMFCPropertyGridCtrl 的 AddProperty()⽅法:⽅法的声明如下int AddProperty(CMFCPropertyGridProperty* pProp, BOOL bRedraw = TRUE, BOOL bAdjustLayout = TRUE);在加⼊这个属于之前,需要构造⼀个属性。
在这个属性⾥⾯,还有⼏个⼆级的属于如“概述”下⾯的 “标题”和“级别”两个属于,这两个属性属于 “概述”这个⼤属性⾥⾯的。
C和串口通信方法SerialPort控件本例程主要讲解使用C#,实现与232串口通信。
达到采集串口数据,监控,可视化处理等。
一.概述在Visual Studio 中编写串口通讯程序,一般都使用Microsoft?Communication?Control(简称MSComm)的通讯控件,只要通?过对此控件的属性和事件进行相应编程操作,就可以轻松地实现串口通讯。
但在技术广泛应用的今天,Visual 没有将此控件加入控件库,所以人们采用了许多方法在Visual 来编写串口通讯程序:第一种方法是通过采用Visual Studio 中原来的MSComm控件这是最简单的,最方便的方法,但需要注册;第二种方法是采用微软在.NET 推出了一个串口控件,基于.NET的P/Invoke 调用方法实现;第三种方法是自己用API写串口通信,虽然难度高,但可以方便实现自己想要的各种功能。
现在微软推出了最新版本的Visual Studio 2005开发工具,可以不再采用第三方控件的方法来设计串口通讯程序。
NET Framework 类库包含了SerialPort 类,方便地实现了所需要串口通讯的多种功能,为了使MSComm编程方法快速转换到以SerialPort类为核心的串口通讯的设计方法,本文着重讨论了Visual Studio 的MSComm控件和SerialPort 类设计方法的异同点。
二.SerialPort常用属性、方法和事件1.命名空间命名空间包含了控制串口重要的SerialPort类,该类提供了同步I/O 和事件驱动的I/O、对管脚和中断状态的访问以及对串行驱动程序属性的访问,所以在程序代码起始位置需加入Using 。
2.串口的通讯参数串口通讯最常用的参数就是通讯端口号及通讯格式(波特率、数据位、停止位和校验位),在MSComm中相关的属性是CommPort和Settings。
SerialPort类与MSComm有一些区别:a.通讯端口号[PortName]属性获取或设置通信端口,包括但不限于所有可用的COM 端口,请注意该属性返回类型为String,不是的short类型。
Xtrareport1,此报表在设置时,paperkind中找不到自定义的纸张,所以我就在事件beforeprint中,this.Margins = new System.Drawing.Printing.Margins(10, 10, 10, 10);this.PaperKind = System.Drawing.Printing.PaperKind.Custom;this.PageWidth = 827;this.PageHeight = 584;this.PaperName = "21*13"2.加载已有模板xrpt1.LoadLayout(@"E:\EMS.repx");Developer Express 之XtraReport报表预览控件PrintControl设置using System;02 using System.Collections.Generic;03 using ponentModel;04 using System.Data;05 using System.Drawing;06 using System.Text;07 using System.Windows.Forms;08 using DevExpress.XtraEditors;09 using DevExpress.XtraReports.UI;10 using DevExpress.XtraPrinting.Preview;11 using DevExpress.XtraPrinting;12 using DevExpress.XtraPrinting.Control;1314 namespace WFAXtraReport15 {16 public partial class Form1 : Form17 {18 public Form1 ()19 {20 InitializeComponent();21 }2223 private void Form1 _Load(object sender, EventArgs e) 24 {2526 XtraReport fXtraReport = new XtraReport();27 //fXtraReport.LoadLayout(@"C:\1.repx");2829 PrintControl printControl1 = new PrintControl(); 30 printControl1.PrintingSystem = fXtraReport.PrintingSystem;313233 PrintBarManager printBarManager = new PrintBarManager();34 printBarManager.Form = printControl1;35 printBarManager.Initialize(printControl1);36 printBarManager.MainMenu.Visible = false;37 printBarManager.AllowCustomization = false;3839 //操作要显示什么按钮40 printControl1.PrintingSystem.SetCommandVisibility(new P rintingSystemCommand[]{41 PrintingSystemCommand.Open,42 PrintingSystemCommand.Save,43 PrintingSystemCommand.ClosePreview,44 PrintingSystemCommand.Customize,45 PrintingSystemCommand.SendCsv,46 PrintingSystemCommand.SendFile,47 PrintingSystemCommand.SendGraphic,48 PrintingSystemCommand.SendMht,49 PrintingSystemCommand.SendPdf,50 PrintingSystemCommand.SendRtf,51 PrintingSystemCommand.SendTxt,52 PrintingSystemCommand.SendXls53 }, CommandVisibility.None);5455 fXtraReport.CreateDocument();5657 Controls.Add(printControl1);58 printControl1.Dock = DockStyle.Fill;59 }60 }61 }关于XtraReport的功能还有很多,细节上的处理还有很多,留待以后再整理,先整理这几个常用的。
xtreme toolkit pro——CXTPReportControl控件教程作者:Kevin.Xiong来源:博客园发布时间:2011-03-31 14:10 阅读:31 次原文链接[收藏] CXTPReportControl控件是xtreme toolkit pro中的一个控件,它用来显示表格,可以显示表头表尾,可以对各列排序,拖放,等等,,也可以对各个单元格进行编辑,功能非常强大。
下面介绍一下他的使用:1. 在工程中头文件“stdafx.h”中添加:#include <XTToolkitPro.h> // Xtreme Toolkit Pro component library2. 如果要使用静态连接的方式,还应该:Add the following line to your application's .rc2 file. This will link in the toolkit resources so they are available to your application.#include <XTToolkitPro.rc>如果是动态连接的方式,需要xtreme toolkit的.dll拷贝到exe的输出目录下。
3. 添加CXTPReportControl控件:(1)在对话框中添加一个自定义控件,将该控件的class属性改为XTPReport,ID改为;IDC_REPORTCTRL_LIST。
(2)添加一个自定义变量:CXTPReportControl m_wndReportCtrl;(3)将控件和变量联系起来,在对话框初始化函数OnInitDialog()中添加如下代码:m_wndReportCtrlList.SubclassDlgItem(IDC_REPORTCTRL_LIST,this);4. 设置控件的外观://初始化报表的外观m_wndReportCtrl.AllowEdit(FALSE);//m_wndReportCtrl.EditOnClick(FALSE);//m_wndReportCtrl.EnableDragDrop(NULL, xtpReportAllowDrag | xtpReportAllowDrop);//允许拖曳行m_wndReportCtrl.EnableToolTips(TRUE);//在列头显示提示tooltips//m_wndReportCtrl.ShowHeader(TRUE);//显示头部(默认显示)//m_wndReportCtrl.ShowHeaderRows(TRUE);//显示头行//m_wndReportCtrl.ShowFooter(TRUE);//显示页脚footer,即界面下边,与header 对应//m_wndReportCtrl.ShowFooterRows(TRUE);//显示页脚行//m_wndReportCtrl.HeaderRowsAllowEdit(TRUE);//允许编辑HeaderRows//m_wndReportCtrl.FooterRowsAllowEdit(TRUE);//允许编辑FooterRows// COLORREF clrNew;// clrNew = RGB(0, 255, 0);// m_wndReportCtrl.SetGridColor(clrNew);//设置网格线颜色m_wndReportCtrl.SetGridStyle(TRUE,XTPReportGridStyle(xtpReportGridSolid) );//设置垂直网格线风格m_wndReportCtrl.SetGridStyle(FALSE,XTPReportGridStyle(xtpReportGridSolid ));//设置垂直网格线风格//m_wndReportCtrl.SetFreezeColumnsCount(2);//左侧两列冻住,注意,此方法必须在添加了列之后才能使用m_wndReportCtrl.GetPaintManager()->SetColumnStyle(XTPReportColumnStyl e(xtpReportColumnOffice2007));//设置列的风格//m_wndReportCtrl.GetPaintManager()->SetGridColor(clrNew);//设置网格线颜色m_wndReportCtrl.GetReportHeader()->AllowColumnRemove(FALSE);//不允许移除列m_wndReportCtrl.GetReportHeader()->AllowColumnResize(TRUE);//允许改变列的宽度m_wndReportCtrl.GetReportHeader()->AllowColumnSort(TRUE);//允许对列中的各行排序m_wndReportCtrl.GetReportHeader()->AllowColumnReorder(FALSE);//不允许列之间重新排序(通过拖拽列头部)m_wndReportCtrl.GetReportHeader()->SetAutoColumnSizing(TRUE);//不允许各列自动调节宽度//设置列宽自动调整为false,这样一来,所有列宽不是随reportControl的宽度变化而自动变化。
//如果所有的列宽之和大于reportControl的宽度,就会自动显示横向工具条m_wndReportCtrl.SetFullColumnScrolling(FALSE);//按像素水平滚动,而不是逐列滚动(即滚动一下就移动一列)//m_wndReportCtrl.SetFullColumnScrolling(TRUE);//逐列滚动(即滚动一下就移动一列)m_wndReportCtrl.SetMultipleSelection(TRUE);//允许多选5. 添加列:///添加列CXTPReportColumn* pCol1=new CXTPReportColumn(0, _T("序号"), 80);pCol1->SetHeaderAlignment(DT_CENTER);pCol1->SetAlignment(DT_CENTER);//pCol1->SetEditable(FALSE);//不可编辑m_wndReportCtrl.AddColumn(pCol1);6. 添加行CXTPReportRecord *pRecord = new CXTPReportRecord();pRecord->AddItem(new CXTPReportRecordItemNumber(i+1));//行号pRecord->AddItem(newCXTPReportRecordItemText(m_pDataGroup->m_arrDataTable[i].m_sBusInfo) );//基本信息pRecord->AddItem(newCXTPReportRecordItemNumber(m_pDataGroup->m_arrDataTable[i].m_dMw1 ,KEY_FORMAT_NUMBER));pRecord->AddItem(newCXTPReportRecordItemNumber(m_pDataGroup->m_arrDataTable[i].m_dMw2 ,KEY_FORMAT_NUMBER));pRecord->AddItem(newCXTPReportRecordItemNumber(m_pDataGroup->m_arrDataTable[i].m_dMw2 -m_pDataGroup->m_arrDataTable[i].m_dMw1,KEY_FORMAT_NUMBER));m_wndReportCtrl.AddRecord(pRecord);7. 显示m_wndReportCtrl.Populate();8. 添加报表行焦点改变事件:(1)在报表所在对话框的头文件中添加消息映射函数:afx_msg void OnReportFocusChanging(NMHDR* pNMHDR, LRESULT* result);(2)在报表所在对话框的源文件中将消息映射函数和报表控件联系起来,即在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间添加:ON_NOTIFY(XTP_NM_REPORT_FOCUS_CHANGING, IDC_REPORTCTRL_LIST, OnReportFocusChanging)(3)实现消息映射函数,如下://表中焦点行改变时的事件(包括用鼠标单击和用键盘的方向键)void CWEReportDlg::OnReportFocusChanging(NMHDR * pNotifyStruct, LRESULT * /*result*/){XTP_NM_REPORTRECORDITEM* pItemNotify =(XTP_NM_REPORTRECORDITEM*) pNotifyStruct;if (!pItemNotify) return;CXTPReportRow* pRowSel=pItemNotify->pRow;if (!pRowSel) return;TRACE(_T("Click on row %d\n"),pRowSel->GetIndex()); CXTPReportRecord* pRecordSel=pRowSel->GetRecord();if(!pRecordSel) return;CXTPReportRecordItemText*pText=(CXTPReportRecordItemText*)(pRecordSel->GetItem(0));if(!pText) return;if (pText->GetValue().Trim()==m_sTableNameNow){return;//如果单击的行和上一次是同一行,就不用进行下面的操作}//更新当前记录和ATCm_sTableNameNow=pText->GetValue().Trim();if (m_sTableNameNow!=""){FindTableByName(m_sTableNameNow);//更改选择的报表后,更新相应的已选框和待选框中的内容UpdateReportTable();}}下面是另一篇文档一使用前的准备1 新建一个基于对话框的MFC程序ReportControlTest。