Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5950
  • 博文数量: 7
  • 博客积分: 240
  • 博客等级: 二等列兵
  • 技术积分: 75
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-08 14:23
文章分类
文章存档

2011年(1)

2009年(6)

我的朋友
最近访客

分类:

2009-05-08 15:38:28

水晶报表
1.拉模式
所谓拉模式就是用水晶报表直接绑定数据库中的表,不需要写任何代码。
优点:操作简单;
缺点:不灵活。
操作方法:添加新项-》选择Crystal报表;
        在aspx页面中添加CrystalReportViewer控件,选择报表源。
        在pagelode中添加CrystalReportSource1.ReportDocument.SetDatabaseLogon("sa", "sa", @".", "zjwhjg");
        来解决每次打开都提示登陆的问题。
2.推模式
所谓推模式就是写代码从数据库中取数据,然后填充数据集。再把水晶报表和数据集绑定。需要写代码。
优点:灵活,功能强大。
缺点:操作较繁琐。
操作方法:添加新项-》选择数据集,给数据集添加列。
        添加新项-》选择Crystal报表;
       在aspx页面中添加CrystalReportViewer控件,选择报表源。
       绑定的方法:
string sql = "exec report_ClientSatate";
        string DBConfig_sql = @"Data Source=.;Initial Catalog=zjwhjg;User ID=sa;Password=sa";
        DataSet ds = new DataSet();
        SqlConnection sqlCon = new SqlConnection(DBConfig_sql);
        SqlCommand sqlCmd = new SqlCommand(sql, sqlCon);
        SqlDataAdapter sqlAd = new SqlDataAdapter();
        sqlAd.SelectCommand = sqlCmd;
        sqlAd.Fill(ds, "sql");
        CrystalReportSourceClient.ReportDocument.Load(Server.MapPath("CrystalReportClient.rpt"));
        //注意此处必需指明Dataset中的表的名称,否则会提示“您请求的报表需要更多信息.”
        CrystalReportSourceClient.ReportDocument.SetDataSource(ds.Tables["sql"]);
        //{?}中的参数可以不用赋值,即使赋了值也不起作用。
        // CrystalReportSource1.ReportDocument.ParameterFields["Parm"].CurrentValues.AddValue("1234567");
        //CrystalReportSource1.ReportDocument.ParameterFields["Title"].CurrentValues.AddValue("这时推模式的报表样例!");
        //CrystalReportSource1.DataBind();
        CrystalReportViewer2.ReportSource = CrystalReportSourceClient;
        CrystalReportViewer2.DataBind();
        存储过程:
CREATE PROCEDURE report_ClientSatate
 AS
begin
declare  @num int
declare   @state nvarchar(20)
declare  @numAll int
 CREATE TABLE #Test
(
 
 state varchar(50),
 num int

 
)
 set  @state='在线'
 select  @num= count(*) from currentusers
 insert into  #Test(state,num)values(@state,@num)
 set  @state='全部'
 select  @numAll=sum(ComputerAmount) from BarInfo
 insert into  #Test(state,num)values(@state,@numAll)
             set @state='离线'
             insert into  #Test(state,num)values(@state,@numAll-@num)
            
 select * from #Test
 
drop table #Test
 
end
GO

需要注意的是查询出的数据集的字段要与自己定义的数据集的字段相同。
 
 
 
阅读(310) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:游标

给主人留下些什么吧!~~