再谈水晶报表 (王智谈水晶报表系列2 附源码)
www.sywangzhi.com QQ:
16994162
首先,介绍一个用例数据库
数据库名: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;
}