水晶报表动态赋数据源问题,还是无法解决!!!!!!!高手来给看看吧!急!分不够再加!

realhotsummer 2005-05-23 08:07:28
老大们:
我要动态的将数据源赋给报表(通过数据集xsd文件)
代码如下:
string myConnectionString = "..."
SqlConnection myConnection = new SqlConnection(myConnectionString);
string mySelectQuery = "select * from A_CK";
SqlDataAdapter myDataAdapter = new SqlDataAdapter(mySelectQuery, myConnection);
//DataSet1为用XML 架构定义语言 (XSD) 描述的DataSet架构
Dataset1 dsBill = new Dataset1();
// 连接到数据库、从数据库中获取数据然后断开数据库连接
myDataAdapter.Fill(dsBill,"A_Ck");
//实例化水晶报表
CrystalReport3 CR_Bill = new CrystalReport3();
//登录信息
CrystalDecisions.Shared.TableLogOnInfos myTableLogonInfos =
new TableLogOnInfos();
CrystalDecisions.Shared.TableLogOnInfo myTableLogonInfo =
new TableLogOnInfo();
CrystalDecisions.Shared.ConnectionInfo myConnectionInfo =
new ConnectionInfo();
myConnectionInfo.ServerName = "...";
myConnectionInfo.DatabaseName = "...";
myConnectionInfo.UserID = "...";
myConnectionInfo.Password = "...";

myTableLogonInfo.ConnectionInfo = myConnectionInfo;
myTableLogonInfo.TableName = "A_CK";
myTableLogonInfos.Add(myTableLogonInfo);
this.crystalReportViewer1.LogOnInfo = myTableLogonInfos;

//将填充的数据集传递给报表
CR_Bill.SetDataSource(dsBill);

//设置报表源,将该报表对象绑定到 Web 窗体查看器
crystalReportViewer1.ReportSource=CR_Bill;
crystalReportViewer1.RefreshReport();

问题在于,dsBill确实被填充了,其中有个叫A_CK的表,也有数据,但CR_Bill.SetDataSource(dsBill);执行之后,在CR_Bill中的dataBase.Tables.Count竟为0,报表的数据源没有表,当然也没有数据,(此时dsBill中仍有数据表)就好像CR_Bill.SetDataSource(dsBill);没起作用。

本来要用存储过程的,但连表都无法实现
各位老大帮帮忙吧,救急!!!!!!!!!!!!!!!!!!
...全文
355 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
kqh0319 2005-06-14
  • 打赏
  • 举报
回复
学习...
realhotsummer 2005-05-28
  • 打赏
  • 举报
回复
都解决了。谢谢大家
cnming 2005-05-28
  • 打赏
  • 举报
回复
怎样将两个分别计算的DataSet放到一个DataSet中,即将两个dataset中的表放到一个中

DataSet 可以容纳很多个Table的,所以可以放到一起
realhotsummer 2005-05-25
  • 打赏
  • 举报
回复
谢谢,cnming(cnming) ( )
你的方法没问题,我的问题基本解决了。
我还想问一下,怎样将两个分别计算的DataSet放到一个DataSet中,即将两个dataset中的表放到一个中,再用报表的setdataSouce()方法。
realhotsummer 2005-05-24
  • 打赏
  • 举报
回复
谢谢,CSDNATM(青蛙【自娱自乐】) ( )
但好像所答非所问,是否可以脱离事先赋字段值?
CSDNATM 2005-05-24
  • 打赏
  • 举报
回复
使用Pull模式
  我们将通过下面的这些步骤来通过Pull模式来执行水晶报表
  1.首先创建rpt文件,并使用水晶报表设计接口设置一些必须的数据连接。
  2.拖放一个 CrystalReportViewer控件至aspx页面,设置它的属性指定我们上一步创建的.rpt文件。
  3. 在代码中调用DataBind方法。
  创建 .rpt 文件:
  1) 在右击”解决方案游览器“,在弹出的菜单中选择”添加“--”添加新项“-->”Crystal Report”  

  2) 在”Crystal Report 库”中选择”作为空白报表“单选按钮,最后单击“确定“。  

  3)这里将弹出水晶报表设计器。  

  4) 右击报表中的”详细资料区”,选择“数据库”->“添加/删除数据库..."
  5) 在弹出的”数据库专家“中,扩展”OLE DB(ADO)“选项,此时会弹出另外一个”OLE DB(ADO)“窗口。
  6) 在 "OLE DB (ADO)" 弹出窗口中,选择 "Microsoft OLE DB Provider for SQL Server" 然后 "Next"

  7) 指定连接的信息
  服务器 : ASPCN (您的机器是什么名字就写什么)
  用户 ID: sa
  密码:
  数据库 : Pubs
  8) 单击”Next“,最后单击”Finish“按钮。
  9) 这时你就能在”数据库专家“窗口中看到我们选择的数据库。
  10) 扩展”Pubs“数据库,扩展”表“,选择”Stores“表并将其加到”选定的表“区中,单击”OK"按钮。
 
  11) 现在在”字段资源浏览器“中就会在左边”数据库字段“区中显示你选择的表,以及表中的字段。
  12) 拖放需要的字段进入报表的”详细资料“区。字段名将会自动出现在”页眉“区。如果你想修改头部文字,则可以右击”页眉“区中的文字,选择”编辑文本对象“选项并进行编辑。

  13) 保存,这样我们就有了一个水晶报表文件。
  创建 CrystalReportViewer 控件
  14) 回到前面的WebForm中,拖放一个Crystal Report Viewer控件到页面中去。
  15) 调出Crystal Report Viewer控件的属性窗口,选择“DataBindings"区点击[...]
  16) ”Crystal Report Viewer 数据绑定窗口”中,在右边的“可绑定属性”中选择”ReportSource“,并选择右下角的“自定义绑定表达式”中指定.rpt文件路径。  

  17) 此时你能够从Crystal Report Viewer 控件中看到使用一些虚拟数据组成的报表文件的预览。
  注意:在上面的例子中,CrystalReportViewer可以在设计时直接调用真实的数据,因为此时数据已经保存。在这种情况下,设计时当没有保存数据时,他是不能显示数据的。取而代这的是显示一些虚拟的数据,只有在执行时才会选取真实的数据。
  Code Behind 程序设计
  18) 在Page_Load方法中调用DataBind方法。
  执行你的程序
  19) 创建并运行你的程序!  
  您现在就可以直接在Web页面中使用水晶报表内置的一些功能,如页面导航,缩放等。
cnming 2005-05-24
  • 打赏
  • 举报
回复
>>我想动态的在程序里指定,因为要打印的报表很多,不可能每一个都用一个连好表的rpt文件吧。


不明白什么叫着“打印的报表很多”,每种报表你总是都要做嘛,比如客户名单报表,客户记录报表,这总是要做两份报表的嘛,难道你想就做一个?


此外,制定XML仅仅是指定数据结构而已,最终都是由rpt.SetDataSource(DS);中的DS把数据导入报表的,代码都写得那么详细了,为何不试试看?

realhotsummer 2005-05-23
  • 打赏
  • 举报
回复
那我提到的问题中,是不是还应先在报表中加入字段?如果这样的话,CR_Bill.SetDataSource(dsBill);根本就谈不上什么动态了。

而且我发现,水晶报表有的数据库类型不支持(如uniqueidentifier),那原来的存储过程还得重写一套,有没有其他得方法?
我目前能想到的是从Dataset.xsd先过渡一下,这样就会自动转换成水晶报表能够识别得类型,再用CR_Bill.SetDataSource(dsBill);实现动态赋值。如果还是要先在报表中指定字段(存储过程)的话,水晶报表将会报错(不支持类型等)。

有人解决了吗? 不胜感激
Cry_Out 2005-05-23
  • 打赏
  • 举报
回复
mark,最近也在想这个问题,有一种动态指定的方法,但也不是完全的动态,量先指定了字段,程序在以后动态指定记录集.
http://www.cnblogs.com/babyt/archive/2005/05/12/116878.html#154005

有无更好的方法?即能完全动态指定!!!包括字段定义.象在excel中一样
realhotsummer 2005-05-23
  • 打赏
  • 举报
回复
to:scocsdn(发菜) ( )
去掉也不对。
to:cnming(cnming) ( )
我想动态的在程序里指定,因为要打印的报表很多,不可能每一个都用一个连好表的rpt文件吧。

老大们,再帮帮忙啊!《》
cnming 2005-05-23
  • 打赏
  • 举报
回复
说说我的做法

DS = null;
DS = new System.Data.DataSet();

m_strSQL = "";
m_strSQL = m_strSQL + "SELECT CustomerID as CustomerID, CustomerName, Sex, CustomerSpell, Trademark, BalanceIntegral, CardNo, SortName, Address, Phone, IdentityID, Email AS Email, CardID as CardID";
m_strSQL = m_strSQL + " FROM T_Customer";
m_strSQL = m_strSQL + " WHERE (((IsUse)>=0))";
if(this.txtCustomerName.Text.Trim().Length > 0)
{
m_strSQL = m_strSQL + " And CustomerName like '%" + this.txtCustomerName.Text.Trim() + "%'";
}
if(this.txtTrademark.Text.Trim().Length > 0)
{
m_strSQL = m_strSQL + " And Trademark like '%" + this.txtTrademark.Text.Trim() + "%'";
}
if(this.txtCardNumber.Text.Trim().Length > 0)
{
m_strSQL = m_strSQL + " And CardNo like '%" + this.txtCardNumber.Text.Trim() + "%'";
}
m_strSQL = m_strSQL + " ORDER BY CustomerSpell";

ClassGlobe.conn.Open();
System.Data.OleDb.OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter(m_strSQL, ClassGlobe.conn);
adapter.Fill(DS, "T_Customer");
ClassGlobe.conn.Close();

//DS.WriteXml(@"d:\AutoClubCustomer.xml", System.Data.XmlWriteMode.WriteSchema);

rpt = null;
rpt = new rptQueryCustomer();
rpt.SetDataSource(DS);

this.crvQueryCustomer.ReportSource = rpt;



首先,把//DS.WriteXml(@"d:\AutoClubCustomer.xml", System.Data.XmlWriteMode.WriteSchema);
的注释去掉。
同时把
rpt = null;
rpt = new rptQueryCustomer();
rpt.SetDataSource(DS);

this.crvQueryCustomer.ReportSource = rpt;

注释起来,
然后运行一遍这些代码,你就会获得一个XML文件“d:\AutoClubCustomer.xml”

现在就可以新建一个空白报表了。假如取名为“rptQueryCustomer”
然后,添加/删除数据库,然后选择“更多数据源”--〉ADO.NET(XML),然后选择d:\AutoClubCustomer.xml,然后就有字段了,直接在报表上排列即可。



scocsdn 2005-05-23
  • 打赏
  • 举报
回复
因为你用的是推模式,登录信息这段就不用加了

110,499

社区成员

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

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

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