[转] 再谈水晶报表 (王智谈水晶报表系列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;
}
- [转] 再谈水晶报表 (王智谈水晶报表系列2 附源码) [http://blog.csdn.net/sywangzhi/archive/2007/07/08/1682948.aspx]
- [转] 水晶报表Q&A [http://blog.csdn.net/wzhibin/archive/2007/06/01/1634209.aspx]
- [转] 水晶报表公式使用 [来自--http://blog.csdn.net/cooldidi1/archive/2007/07/20/1700791.aspx]
- [转] 部署水晶报表时的常见问题及解决方案 [http://blog.csdn.net/ytbada/archive/2007/06/26/1666594.aspx]
- [转] 彻底解决水晶报表中登陆的错误 [http://blog.csdn.net/wzhibin/archive/2007/06/01/1634370.aspx]
- [转]水晶报表参数编程示例代码[http://blog.csdn.net/xwdd129/archive/2006/05/29/760672.aspx]
- [转]水晶报表中动态保留数字字段小数位 [http://blog.csdn.net/xwdd129/archive/2006/05/29/760661.aspx]
- [转]水晶报表的使用经验和资料总结 [http://blog.csdn.net/coolsummer1980/archive/2006/09/30/1310588.aspx]
- 再谈水晶报表 (王智谈水晶报表系列2 附源码)
- [转]水晶报表列太多导致设计界面容纳不下的解决方法 [http://blog.csdn.net/lupenda/archive/2005/08/12/452878.aspx]
- [转]c#编程更改水晶报表中公式字段示例代码 [http://blog.csdn.net/xwdd129/archive/2006/05/29/760661.aspx]
- C#向Excel报表中插入图片的2种方法 http://blog.csdn.net/net_lover/archive/2007/07/23/1702797.aspx
- 再谈水晶报表
- [水晶报表]Asp.net调用水晶报表
- [转] 一个分组查询的SQL 常用算法(附源码可直接执行) [来自--http://blog.csdn.net/rainbowsoftware/archive/2007/04/26/1585355.aspx]
- [转] 在ASP.NET下用Microsoft Excel进行数据分析与报表(ASP.Net)[http://blog.csdn.net/hoker_long/archive/2004/09/21/112470.aspx]
- 关于交叉报表的动态实现 [http://blog.csdn.net/lupenda/archive/2004/10/18/141744.aspx]
- .Net水晶报表使用
- shawl.qiu Javascript 代码格式化类/Styler, StyleEngine v1.1
- 关于CMP2.0中的EJB-QL的中的 where子句的问题
- NASM
- 在.Net中嵌入资源文件到程序集中
- MAVEN安装全程指南(新手必看)
- [转] 再谈水晶报表 (王智谈水晶报表系列2 附源码) [http://blog.csdn.net/sywangzhi/archive/2007/07/08/1682948.aspx]
- ejb工作介绍
- 经典精悍的手机短信
- 进程通信小结
- [转]祝福大家工作顺利的祝福短信 [http://blog.csdn.net/zhaoxiaoyang5156/MyArticles.aspx]
- 多线程编程小结
- [转]SReng分析方法
- 说明多种文件格式定义的好网址
- 即将进入数据仓库之旅