你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 跟高手学编程
VC++.NET报表编程——绘制股价表(二)
 

二、制表

本节主要讲解如何绘制报表,并将报表显示在窗体上。

制表用数据与绘图用数据一样,不必再准备数据,直接调用DrawingForm类的GetData方法就可以得到。

由于窗口可以自动滚动,所以勿需对报表分页。

报表编程与图形编程实质是相同的,不同在于报表编程更多的是对文本的格式控制。

准备界面

与前两讲类似,在实例程序中添加一个窗体,再在窗体上添加一个PictureBox控件,用作显示报表的界面。在窗体加载时将报表显示出来。

此外,为了让用户选择打印报表、预览报表和设置打印页面功能,在窗体添加一个工具条。

添加窗体和PictureBox控件

为窗体或PictureBox控件设置以下属性:

1)  窗体的名称为“ReportForm”。

2)窗体的Text属性为“制表”。

3)保持PictureBox控件的Name属性的默认值“pictureBox1不变。

4)设置PictureBox 控件的Dock属性为“Fill”、BackColor属性为“White”。

5)适当调整窗体的大小。

创建工具条

工具条可以在 Windows 窗体应用程序中承载菜单、控件和用户控件。通过点击工具条,用户可以方便地选择自己所需的功能。

VS.NET 2005中,早期版本的工具条ToolBar控件被ToolStrip 控件替换。ToolStrip 控件不仅功能更丰富,而且使用也更方便。

报表编程既要绘制报表,还要打印报表、预览报表和设置打印页面。为了让用户灵活地选择这些功能,可以在窗体上添加3个工具条,供用户选择打印报表、预览报表和设置打印页面。

创建工具条与创建菜单很类似:

1)打开“工具箱”的“菜单和工具栏”选项卡,将ToolStrip控件拖放到制表窗体上。

2)单击工具栏上提示为“添加toolStripButton”的矩形,从列表框中选择“Button”,即添加一个工具条。同时,新项框移到右边,以允许添加其他工具条。

3)选择添加的工具条,设置ToolTipText属性为“打印”。这是系统为用户显示的工具条提示。

4)从新项框列表中选择“Separator”,添加一个分隔符。

5)继续添加一个工具条,设置ToolTipText属性为“打印预览”。

6)再添加一个分隔符“Separator”。

7)最后,添加一个工具条,设置ToolTipText属性为“页面设置”。

完成以上步骤后,制表窗体布局如图2所示。

 


 

2  制表窗体布局

取数据

制表用数据与绘图用数据一样,所以直接调用DrawingForm类的GetData方法就可以得到制表所用的数据。为此,编写或修改以下代码:

(1)为了引用DrawingForm类,在ReportForm. h中添加以下代码以包含DrawingForm.h包含文件:

#include "DrawingForm.h"

(2)为了在ReportForm.类中调用DrawingForm类的GetData方法,将DrawingForm类中声明GetData方法的访问修饰符由private改为public

public: DataTable^ GetData(String^ selectCommand)

(3)ReportForm.类中添加Table方法,用于绘制在窗体中显示的报表。在Table方法中,调用DrawingForm类的GetData方法以获取数据表:

private:void Table(Graphics^ g)

{

    // 构造SQL select语句。

    String^ selectCommand="select convert(varchar(10),日期,120) as '日期',开盘价,

收盘价,成交量,最高价,最低价 from StockList";

    // 调用GetData方法返回包含个股(指数)数据的数据表。

    DrawingForm^ drawingfrm=gcnew DrawingForm();

    DataTable^ table = drawingfrm->GetData(selectCommand);

 

    int dayCount=table->Rows->Count;    // 数据表记录(交易日)数。

    if (dayCount<=0)

    {

        MessageBox::Show( "无数据!");

        return;

    }

}

⒊ 绘页眉

页眉可以是报表的名称。这里指定页眉的字符串是“上证指数行情表”。绘页眉之前,要计算页眉的坐标,设置页眉的字体、字号、画笔等参数。

编写代码如下:

// 设置页面。

float p_width=627.0F;   // 边距以内页面部分的矩形区域的宽度。

float p_left=100.0F;     // 边距以内页面部分的矩形区域左边缘的 x 坐标。

float p_top=100.0F;     // 边距以内页面部分的矩形区域上边缘的 y 坐标。

 

float p_h=p_top;   // 累计报表页面(含边距)高度。

float rs=5.0F;     // 行间距。

float cs=3.0F;     // 列间距。

const int cn=6;    // 报表细节的列数。

 

// 绘制页眉。

String^ ttlString = "上证指数行情表";

int fn=14;    // 设置字号。

float fp_q=1.0F;    // 字号放大比例。

System::Drawing::Font^ ttlFont =

    gcnew System::Drawing::Font("Arial", fn*fp_q,

    GraphicsUnit::Pixel);  // 设置字体。

System::Drawing::SolidBrush^ ttlBrush = gcnew

    System::Drawing::SolidBrush(System::Drawing::

    Color::Black);  // 准备实心画笔。

SizeF ttlSize = g->MeasureString(

    ttlString, ttlFont);

float ttlWidth= ttlSize.Width;     // 获取页眉宽度(像素个数) 

float ttl_x =p_left+(p_width-ttlWidth)/2;    // 为使页眉在页面水平方向居中,

// 计算页眉的起始横坐标。

float ttl_y=p_top;    // 页眉的起始纵坐标。

g->DrawString( ttlString,ttlFont,

    ttlBrush ,ttl_x,ttl_y);    // 画页眉。

p_h=p_h+ttlSize.Height;

  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089