有关水晶报表的菜鸟问题

killua820812 2004-12-22 09:53:56
1. 是否在做每个报表之前一定要先写一个.rpt文件?
2. 若我仅仅建了个空白的rpt后如何通过dataset将查询结果传入水晶报表?
3. 若我仅仅想用水晶报表的样式,又想用自己的sql那对应的字段又应该如何和报表绑定?
4. 看了一些大家别的帖子的回复,好像意思是多表联查的结果放入报表要有处理?我没看懂,是否能解释一下?
5. 能否提供代码实例让我学习学习,谢谢!
...全文
264 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
hanbinghai 2004-12-22
  • 打赏
  • 举报
回复
你还是自己给水晶报表dataSet比较容易控制
killua820812 2004-12-22
  • 打赏
  • 举报
回复
sqlserver 表里的数据
hanbinghai 2004-12-22
  • 打赏
  • 举报
回复
你用的什么数据源?
killua820812 2004-12-22
  • 打赏
  • 举报
回复
6. 我根据它的向导生成了一个很简单的报表,但是运行时每次都提示要输入数据库密码?请问这个怎么解决,不能象adapter一样记住密码吗?
是你建立水晶报表的时候连接数据库不正确导致的,你重新建立水晶报表看看

我建立的时候都是按照步骤一步一步建的呀,所有输入的东西和以后提示输入的东西都是一样的
lyvvvv 2004-12-22
  • 打赏
  • 举报
回复
看来你真的是什么都不懂啊,你至少可以先多去试试玩啊。看看下面得代码,看对你有没有一点帮助。

这个form得到DataSet,并将此DataSet传给下面得专门得报表打印form
private void btPreview_Click(object sender, System.EventArgs e)
{
PrintOrPreViewReport(false);

}
private void PrintOrPreViewReport(bool bPrint)
{
if(dsTTHMKK.Tables[0].Rows.Count<=0)
{
MessageBox.Show("当前没有可供打印的记录,请先选择条件并执行查询动作之后再打印。",this.Text);
return;
}
//dsTTHMKK.WriteXml(SysInfo.sReportPath+@"JYYM.xml",System.Data.XmlWriteMode.WriteSchema);
string[] sParametername =new string[3]{"companyname","datefrom","dateto"};
string[] sParametervalue =new string[3]{"","",""};
sParametervalue[0]=SysInfo.sConame;
sParametervalue[1]=(dtDateFr.Checked)?dtDateFr.Value.ToShortDateString():"";
sParametervalue[2]=(dtDateTo.Checked)?dtDateTo.Value.ToShortDateString():"";
new frmReport(bPrint,"JYWZ.RPT",sParametername,sParametervalue,dsTTHMKK).ShowDialog();

}


专门得报表打印form,上面有一个crystalReportViewer控件

private bool bPrint=false;
private string sReportname="";
private string[] sParametername;
private object[] sParametervalue;
private DataSet dsReport;
private void frmReport_Load(object sender, System.EventArgs e)
{
if(bPrint)this.Opacity =0;
else this.WindowState =System.Windows.Forms.FormWindowState.Maximized;

CrystalDecisions.CrystalReports.Engine.ReportDocument doc=new CrystalDecisions.CrystalReports.Engine.ReportDocument();
doc.Load(SysInfo.sReportPath+sReportname);
if(dsReport != null)doc.SetDataSource(dsReport.Tables[0]);
if(sReportname.StartsWith("CaseReport"))
{
doc.OpenSubreport("CaseSubReport1").SetDataSource(dsReport.Tables["procsk"]);
doc.OpenSubreport("CaseSubReport2").SetDataSource(dsReport.Tables["pathdrug"]);
}

if(sParametername!=null)
{
for(int i=0;i<sParametername.Length;i++)
{
try
{
doc.SetParameterValue(sParametername[i],sParametervalue[i]);
}
catch(Exception ee)
{
MessageBox.Show("字段名称:"+sParametername[i]+"。"+ee.Message);
}
}
}
this.crystalReportViewer1.ReportSource=doc;
this.crystalReportViewer1.RefreshReport();
if(bPrint)
{
this.crystalReportViewer1.PrintReport();
this.Close();
}
}

至于你的问题:
1.要设计好报表,也就是.rpt文件,之后你才能去调用它,改变它的数据,打印等;
2.DataSet可以作为水晶报表的数据源,比如上面的代码if(dsReport != null)doc.SetDataSource(dsReport.Tables[0]);
3.不一定非用它自带的样式,你可以自己设计,想设计成什么样都可以啊;设置好数据源,将相应的字段插入你想排放的位置;
4.比如主从表,比如发票这样的报表,有头有明细;
5.在上面
6.可以,上面的例子就不需要什么密码,当然设置其他的数据源你也可以在代码写好报表的数据源的连接,就不会在运行提示要密码。
hanbinghai 2004-12-22
  • 打赏
  • 举报
回复
1. 是否在做每个报表之前一定要先写一个.rpt文件?
2. 若我仅仅建了个空白的rpt后如何通过dataset将查询结果传入水晶报表?
以上两个问题,我认为必须要先建立一个水晶报表文件即.rpt文件

3. 若我仅仅想用水晶报表的样式,又想用自己的sql那对应的字段又应该如何和报表绑定?
4. 看了一些大家别的帖子的回复,好像意思是多表联查的结果放入报表要有处理?我没看懂,是否能解释一下?
上边两个问题其实是一个问题,你用强类型的dataSet建立水晶报表,只要传给水晶报表相同结构的DataSet即可
概步骤如下:
你在窗体里设计好强类型的dataSet,也就就是你托拽sqlDataAdapter生成的dataSet
在项目中添加新项选择水晶报表,使用报表专家,在数据中选择项目数据,再选择ado.net数据集,就可以看见刚才生成的dataSet了
在窗体中你在工具箱中添加CrystalReportViewer控件
最后
this.Cursor = Cursors.WaitCursor;
CrystalDecisions.CrystalReports.Engine.ReportDocument crpt = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
crpt.Load(@"D:\crpt_input_find.rpt");
//Ds就是你要绑定的dataSet
crpt.SetDataSource(this.Ds);
this.crystalReportViewer1.ReportSource =crpt;
this.Cursor = Cursors.Arrow;
当然dataSet可以带参数的

5. 能否提供代码实例让我学习学习,谢谢!
http://blog.csdn.net/haibodotnet/category/13322.aspx

6. 我根据它的向导生成了一个很简单的报表,但是运行时每次都提示要输入数据库密码?请问这个怎么解决,不能象adapter一样记住密码吗?
是你建立水晶报表的时候连接数据库不正确导致的,你重新建立水晶报表看看
以上仅是个人观点
killua820812 2004-12-22
  • 打赏
  • 举报
回复
什么书,你也推荐下,最好有下载地址
bhwhy 2004-12-22
  • 打赏
  • 举报
回复
在Csdn中搜一下水晶报表的相关文章
KentYu 2004-12-22
  • 打赏
  • 举报
回复
你最好自己找本书稍微看一下:)都是很基本的东西
killua820812 2004-12-22
  • 打赏
  • 举报
回复
哦,还有个问题
6. 我根据它的向导生成了一个很简单的报表,但是运行时每次都提示要输入数据库密码?请问这个怎么解决,不能象adapter一样记住密码吗?
killua820812 2004-12-22
  • 打赏
  • 举报
回复
哦,原来这个就是强类型,那有没有弱类型呢?呵呵,好了,结贴了,谢谢你
hanbinghai 2004-12-22
  • 打赏
  • 举报
回复
谁开始都是一点不懂的,慢慢来
不过要先看看书,掌握一点基础的东西是必要的
什么都需要一个过程,学习更是这样
^_^
hanbinghai 2004-12-22
  • 打赏
  • 举报
回复
你在窗体里设计好强类型的dataSet,也就就是你托拽sqlDataAdapter生成的dataSet
直接用控件生成的就是强类型的dataSet
killua820812 2004-12-22
  • 打赏
  • 举报
回复
不过这个要先做完,另外 强类型的dataSet 是什么 dataSet?
killua820812 2004-12-22
  • 打赏
  • 举报
回复
哦,有点明白你的意思了,唉,人比较笨,看来我真的不适合搞编程
hanbinghai 2004-12-22
  • 打赏
  • 举报
回复
上边都白说了:(
怎么把dataset里的数据和我生成的rpt里的字段绑定?
你自己做的水晶报表就是根据你的dataSet结构做的,所有在程序中传给相同结构的dataSet即可,楼主再看看前边的回复,我也好像都说了怎么做了
killua820812 2004-12-22
  • 打赏
  • 举报
回复
恩恩,是的,我现在就准备这么做,但是怎么把dataset里的数据和我生成的rpt里的字段绑定呢?

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧