[转]  再谈水晶报表 (王智谈水晶报表系列2 附源码) [http://blog.csdn.net/sywangzhi/archive/2007/07/08/1682948.aspx]

来源:互联网 发布:mac卡死强制退出程序 编辑:程序博客网 时间:2024/06/07 18:22
再谈水晶报表 (王智谈水晶报表系列2 附源码)
www.sywangzhi.com QQ: 16994162
源码下载
写完《Microsoft Visual Studio 2005中使用水晶报表》后。很多朋友咨询水晶报表,这回我以ACCESS数据库为例介绍一下水晶报表在Net中的应用。
首先,介绍一个用例数据库
数据库名:ReportData.mdb
表:Test
数据如下图:
软件环境:Microsoft Visual Studio .NET 2003,Microsoft Visual Studio 2005(sp1) ,用自带的水晶报表。
下面分别介绍水晶报表在net2003及VS2005中的应用。
1.水晶报表文件的建立。
         鼠标右键点击资源管理中的解决方案名,强出菜单如下图。在添加中选添加新项。
在模板窗口选Crystal Report
接下来选“使用报表专家”创建新CrystalReport文档
 
 
 
选数据源,我这里用的是OLE DB(ADO)
选驱动程序
选数据库,注:无论用推模式,还是用拉模式都需要选数据库
出现下图后点击完成。
点击“添加命令”
把报表中的SQL语句填到下图中
选择报表字段
点击完成
完成报表后,窗口如下。
如果报表有参数,则按下面设置。点击“切换字段视图”。
 
右键点击参数字段,选新建。
填上参数名,选好参数类型。
现在水晶报表文件已经完成啦。如果想重新设置,在报表窗口右键点击弹出菜单如下,选数据库->添加/删除数据库。可重新设置报表。
 
2.水晶报表代码设计。
在net2003中开发过程如下在工具箱中选取CrystalReportViewer。这个控件是报表浏览器。
再选取ReportDocument这个是水晶报表对像
把这两个控件拽到设计视图。如下:
下面可以写代码啦。
推模式方法:该模式需要用装有数据的DataSet填充报表。方式灵活,建议大家采用此方法做报表。
reportDocument1控件加载报表,
reportDocument1.Load(@"D:/水晶报表/CrystalReport1.rpt");
加载数据,注意要加载Tables表名
reportDocument1.SetDataSource(ds.Tables["sql"]);
绑定并显示报表
crystalReportViewer1.ReportSource=reportDocument1;     
拉模式方法:该方式不需要准备DataSet,数据来自建立报表时的数据库设置
拉模式方法比较简单只需要加载报表就可以。
reportDocument1.Load(@"D:/水晶报表/CrystalReport2.rpt");
crystalReportViewer1.ReportSource = reportDocument1;
某些时候会提示会提示“您请求的报表需要更多信息.”
这是就需要SetDatabaseLogon方法进行登录。参见Microsoft Visual Studio 2005中使用水晶报表
CrystalReportSource1.ReportDocument.SetDatabaseLogon
("sa", "123456", @"SYWZSWL/SQLEXPRESS", "Test");
 
但在Net2003中无法实现带参数的SQL,而VS2005中可以实现带参数的SQL,
在生成带参数报表时的SQL如下图
{?age}这就是参数。
给参数赋值方法都一样。如下
reportDocument1.SetParameterValue("Title", "这是一个测试报表");
水晶报表先介绍到这,大家可以参考我的源代码。我将陆续分期讲解水晶报表详细使用方法。
效果图如下
完整代码如下
[net2003中Form推模式]
         ///再谈水晶报表 (王智谈水晶报表系列2 附源码)
         ///功能:在net2003中推模式提取Form水晶报表
         ///编写人:王智
         ///OICQ:16994162
         ///城市:沈阳
         ///日期:2007-7-8
         ///个人主页:http://www.sywangzhi.com/
         ///如有转贴请注明出处
 
         private void button1_Click(object sender, System.EventArgs e)
         {
              string sql = "select 序号,姓名,年龄,备注 from Test";
              string ConString =@"Provider='Microsoft.Jet.OLEDB.4.0';User ID=Admin;Password=;Data Source=D:/水晶报表/ReportData.mdb";
              DataSet ds = new DataSet();
              OleDbConnection Con = new OleDbConnection(ConString);
              OleDbCommand Cmd = new OleDbCommand(sql, Con);
              OleDbDataAdapter Ad = new OleDbDataAdapter();
              Ad.SelectCommand = Cmd;
              Ad.Fill(ds, "sql");
             
              reportDocument1.Load(@"D:/水晶报表/CrystalReport1.rpt");
              reportDocument1.SetDataSource(ds.Tables["sql"]);
              crystalReportViewer1.ReportSource=reportDocument1;     
         }
[net2003中Form拉模式]
///再谈水晶报表 (王智谈水晶报表系列2 附源码)
         ///功能:在net2003中拉模式提取Form水晶报表
         ///编写人:王智
         ///OICQ:16994162
         ///城市:沈阳
         ///日期:2007-7-8
         ///个人主页:http://www.sywangzhi.com/
         ///如有转贴请注明出处
 
         private void button2_Click(object sender, System.EventArgs e)
         {
              reportDocument1.Load(@"D:/水晶报表/CrystalReport2.rpt");
             reportDocument1.SetParameterValue("Title", "这是一个拉模式测试报表");
              crystalReportViewer1.ReportSource = reportDocument1;
 
         }
[net2003中Web推模式]
     private void Page_Load(object sender, System.EventArgs e)
         {
              // 在此处放置用户代码以初始化页面
              string sql = "select 序号,姓名,年龄,备注 from Test";
              string ConString =@"Provider='Microsoft.Jet.OLEDB.4.0';User ID=Admin;Password=;Data Source=D:/水晶报表/ReportData.mdb";
              DataSet ds = new DataSet();
              OleDbConnection Con = new OleDbConnection(ConString);
              OleDbCommand Cmd = new OleDbCommand(sql, Con);
              OleDbDataAdapter Ad = new OleDbDataAdapter();
              Ad.SelectCommand = Cmd;
              Ad.Fill(ds, "sql");
             
              reportDocument1.Load(@"D:/水晶报表/CrystalReport1.rpt");
              reportDocument1.SetDataSource(ds.Tables["sql"]);
              crystalReportViewer1.ReportSource=reportDocument1;
         }
 
 
 
[net2003中Web拉模式]
         private void Page_Load(object sender, System.EventArgs e)
         {
              // 在此处放置用户代码以初始化页面
              reportDocument1.Load(@"D:/水晶报表/CrystalReport2.rpt");
              reportDocument1.SetParameterValue("Title", "这是一个测试报表");
              crystalReportViewer1.ReportSource = reportDocument1;
         }
 
 
 
 
[VS2005中Form推模式]
///再谈水晶报表 (王智谈水晶报表系列2 附源码)
        ///功能:在2005中推模式提取Form水晶报表
        ///编写人:王智
        ///OICQ:16994162
        ///城市:沈阳
        ///日期:2007-7-8
        ///个人主页:http://www.sywangzhi.com/
        ///如有转贴请注明出处
        private void button1_Click(object sender, EventArgs e)
        {
            string sql = "select 序号,姓名,年龄,备注 from Test";
            string ConString = @"Provider='Microsoft.Jet.OLEDB.4.0';User ID=Admin;Password=;Data Source=ReportData.mdb";
            DataSet ds = new DataSet();
            OleDbConnection Con = new OleDbConnection(ConString);
            OleDbCommand Cmd = new OleDbCommand(sql, Con);
            OleDbDataAdapter Ad = new OleDbDataAdapter();
            Ad.SelectCommand = Cmd;
            Ad.Fill(ds, "sql");
 
            reportDocument1.Load("CrystalReport1.rpt");
            reportDocument1.SetDataSource(ds.Tables["sql"]);
            crystalReportViewer1.ReportSource = reportDocument1;     
        }
 
VS2005与net2003在使用水晶报表的区别在于Web开发时2003用的是reportDocument 2005用的是CrystalReportSource
 
[VS2005中Form拉模式]
  ///再谈水晶报表 (王智谈水晶报表系列2 附源码)
        ///功能:在2005中拉模式提取Form水晶报表
        ///编写人:王智
        ///OICQ:16994162
        ///城市:沈阳
        ///日期:2007-7-8
        ///个人主页:http://www.sywangzhi.com/
        ///如有转贴请注明出处
        private void button2_Click(object sender, EventArgs e)
        {
            reportDocument1.Load("CrystalReport2.rpt");
            reportDocument1.SetParameterValue("Title", "这是一个测试报表");
            //把年龄小于30的记录取出来
            reportDocument1.SetParameterValue("age", 30);
            crystalReportViewer1.ReportSource = reportDocument1;
        }
 
[VS2005中Web推模式]
   ///再谈水晶报表 (王智谈水晶报表系列2 附源码)
        ///功能:在2005中推模式提取WEB水晶报表
        ///编写人:王智
        ///OICQ:16994162
        ///城市:沈阳
        ///日期:2007-7-8
        ///个人主页:http://www.sywangzhi.com/
        ///如有转贴请注明出处
        protected void Page_Load(object sender, EventArgs e)
        {
            string sql = "select 序号,姓名,年龄,备注 from Test";
            string ConString = @"Provider='Microsoft.Jet.OLEDB.4.0';User ID=Admin;Password=;Data Source=D:/水晶报表/ReportData.mdb";
            DataSet ds = new DataSet();
            OleDbConnection Con = new OleDbConnection(ConString);
            OleDbCommand Cmd = new OleDbCommand(sql, Con);
            OleDbDataAdapter Ad = new OleDbDataAdapter();
            Ad.SelectCommand = Cmd;
            Ad.Fill(ds, "sql");
 
            CrystalReportSource1.ReportDocument.Load(Server.MapPath("CrystalReport1.rpt"));
            CrystalReportSource1.ReportDocument.SetDataSource(ds.Tables["sql"]);
            CrystalReportViewer1.ReportSource = CrystalReportSource1;
        }
 
 
 
[net2005中Web拉模式]
        ///再谈水晶报表(王智谈水晶报表系列 附源码)
        ///功能:在中拉模式提取WEB水晶报表
        ///编写人:王智
        ///OICQ
        ///城市:沈阳
        ///日期:2007-7-8
        ///个人主页:http://www.sywangzhi.com/
        ///如有转贴请注明出处
        protected void Page_Load(object sender, EventArgs e)
        {
            CrystalReportSource1.ReportDocument.Load(Server.MapPath("CrystalReport2.rpt"));
            CrystalReportSource1.ReportDocument.SetParameterValue("Title", "这是一个测试报表");
            //把年龄小于30的记录取出来
            CrystalReportSource1.ReportDocument.SetParameterValue("age", 30);
            CrystalReportViewer1.ReportSource = CrystalReportSource1;
        }
 
  
原创粉丝点击