星期零

技术改变生活,分享让我们快乐!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

winform下制作第一张水晶报表

Posted on 2006-03-31 14:31  weekzero  阅读(5420)  评论(10编辑  收藏  举报

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

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

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

CREATE TABLE [dbo].[test] (
 
[id] [decimal](180IDENTITY (11NOT 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 窗体设计器生成的代码

        
/// <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 GetDs()
        
{
            
//创建DataSetTest数据集对象
            DataSetTest ds = new DataSetTest();    
            
            
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,
"test");    //填充数据集,一定要指定表名称:test
            conn.Close();
            
return ds;
        }

    }

}


网上还有一篇李洪根写的,地址如下:
http://www.microsoft.com/china/community/Column/26.mspx