winform下制作第一张水晶报表 (转自weekzero博客.经测试,没有问题.对于从来没有接触过的朋友来说,值得一看.)

初学水晶报表,一头雾水,都是希望先找个简单的示例型的文章看看,本篇就非常的适合(仅适合接触水晶报表但是一个都没有写过的同仁)。

本示例环境:windows2003、vs.net2003、Sql Server2000、水晶报表为vs.net2003自带的。
示例程序为winform下读取sql server2000数据库中一表,使用水晶报表显示列表,非常简单的一个,下面就开始了。

首先建立数据库,生成表的sql语句如下:

CREATE TABLE [dbo].[test] (
 [id] [
decimal](180) IDENTITY (11) NOT NULL ,
 [name] [varchar] (
50) COLLATE Chinese_PRC_CI_AS NULL ,
 [card] [varchar] (
50) COLLATE Chinese_PRC_CI_AS NULL ,
 [createdate] [datetime] NULL 
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[test] ADD 
 CONSTRAINT [PK_test_1] PRIMARY KEY  CLUSTERED 
 (
  [id]
 )  ON [PRIMARY] 
GO

打开vs.net2003,新建立一个C#的winform项目。
程序分3个文件,分别为:Form1.cs、DataSetTest.xsd、CrystalReportTest.rpt

Form1.cs:建立项目时已经生成;
DataSetTest.xsd:该文件为数据集文件,建立完成后在文件中点击“服务器资源管理器”,这样在左边出现了带有“数据连接”的菜单,然后试图展开下面的结点时提示需要一些连接数据库的参数,包括选择数据名称,sa用户和密码等,连接成功后展开“表”的结点,选择你建立的表,将表拖到“DataSetTest.xsd”文件中,这样会自动建立了一个表结构的数据集,然后就建立完成了,生成一下项目,如果不生成直接往下做的话在下一步的建立报表文件时就会遇到问题(可以不生成来试一下就明白了)。
CrystalReportTest.rpt:报表文件,在项目中添加CrystalReport文件,添加时会出现建立向导,首先选择“使用报表专家”,“确定”后展开“项目数据”,展开“ADO.NET数据集”,展开“datasettest”,看到了刚才建立的表“test”,双击就添加到了右边的“报表中的表”中,点“下一步”,再点“全部添加”,点“下一步”,然后点“完成”,这样文件已经建立;下面是设计报表的表样,设计的表样如下图:


这样需要建立的文件已经建立完成,下面是编写代码了。
在Form1.cs文件中添加crystalReportViewer控件,用来显示水晶报表的;再添加“生成报表”按钮,代码全部如下:

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Data.SqlClient;

namespace WinApp
{
    
/**//// <summary>
    
/// Form1 的摘要说明。
    
/// </summary>

    public class Form1 : System.Windows.Forms.Form
    
{
        
private CrystalDecisions.Windows.Forms.CrystalReportViewer crystalReportViewer1;
        
private System.Windows.Forms.Button button1;
        
/**//// <summary>
        
/// 必需的设计器变量。
        
/// </summary>

        private System.ComponentModel.Container components = null;

        
public Form1()
        
{
            
//
            
// Windows 窗体设计器支持所必需的
            
//
            InitializeComponent();

            
//
            
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
            
//
        }


        
/**//// <summary>
        
/// 清理所有正在使用的资源。
        
/// </summary>

        protected override void Dispose( bool disposing )
        
{
            
if( disposing )
            
{
                
if (components != null
                
{
                    components.Dispose();
                }

            }

            
base.Dispose( disposing );
        }


        Windows 窗体设计器生成的代码
Windows 窗体设计器生成的代码

        
/**//// <summary>
        
/// 应用程序的主入口点。
        
/// </summary>

        [STAThread]
        
static void Main() 
        
{
            Application.Run(
new Form1());
        }


        
private void button1_Click(object sender, System.EventArgs e)
        
{
            CrystalReportTest cr1 
= new CrystalReportTest();
        
            cr1.SetDataSource(GetDs());

            
this.crystalReportViewer1.ReportSource=cr1;
        }


        
//该函数返回DataSetTest数据集中表的数据格式的数据集合
        public DataSetTest.testDataTable GetDs()
        
{
            
//创建DataSetTest数据集中的表的对象
            DataSetTest.testDataTable ds = new WinApp.DataSetTest.testDataTable();    
            
            
string strSql = "select * from test";
            
string strConnString = "server=.;database=test;user id=sa;pwd=sa;";

            SqlConnection conn 
= new SqlConnection(strConnString);
            conn.Open();
            SqlDataAdapter da 
= new SqlDataAdapter(strSql,conn);

            da.Fill(ds);    
//填充数据集
            conn.Close();
            
return ds;
        }

    }

}

网上还有一篇李洪根写的,地址如下:
http://www.microsoft.com/china/community/Column/26.mspx
写点自己的感受,在报表建立之前,要先建立一个数据集(是不是都这样呢,看了书,书上也是这么做的.建立数据集之后,把表拖到上面就行了.感觉样子就像视图似的.然后在建立报表的时候,默认为报表专家,下一步之后选新建立的这个数据集.这块有一个问题,就是上文中说到的,建立数据集要先生成一下项目,我在这做的时候,后来没有先生成数据集.也没有问题,问了原作者,他说一定要先生成一下,要不这里选择数据集的时候会没有.而且李洪根那篇文章也有提到,呵呵.难道就这我特殊了.总的来说.按照例子做了一下,对报表有了初步的印象.最好知道报表是什么,怎么使用:)当然这个还很初级,不过事事都从初级过来的不是吗?祝大家好运:) )

posted on 2006-04-01 11:18  书生  阅读(3289)  评论(1编辑  收藏  举报

导航