水晶报表问题:不能更改数据源!(急) up只能up.自己也很想知道。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我这样做没遇到问题: DataSet thisDataSet = new DataSet(); rptCompact rptComp = new rptCompact(); SqlDataAdapter thisAdapter = new SqlDataAdapter(sqlString,thisConn); thisAdapter.Fill(thisDataSet,"Compact"); rptComp.Database.Tables[0].SetDataSource(thisDataSet); rptComp.Database.Tables[0].LogOnInfo.ConnectionInfo.ServerName = strServer; crystalReportViewer1.ReportSource = rptComp; 你的报表中有没有参数字段啊?如果有的话设置一下ReportViewer的参数字段值! 没有参数。如果我在设计报表时,在设计器中更改了数据源为Credit2_3,那么取得的数据就是Credit2_3的。但是--我不可能在每次改数据库名字后,为每个报表都重新打开报表,更改一次数据源嘛。真的要抓狂了自己UP 目前.NET提供的水晶报表设计并不能满足你的需求。 我搜索了csdn上所有与“水晶”,“Crystal”相关的帖子,都没有找到我需要的怎么办嘛5~~~~~~~~~~ 如果你动态的连接数据库到dataset,你在水晶报表中用到的数据源dataset和你的数据库没有直接的关系,你可以用同一个dataset连接不同的数据库,只要查询出的字段名和类型一样就可以。我不明白你为什么非要更改数据源(即dataset)。在目前.NET提供的水晶报表设计没有此功能。 TableLogOnInfo logOnInfo = new TableLogOnInfo (); for(int i=0;i<Rpt.Database.Tables.Count;i++) { logOnInfo.ConnectionInfo.ServerName = ServerName; logOnInfo.ConnectionInfo.DatabaseName = DBName; logOnInfo.ConnectionInfo.UserID = User; logOnInfo.ConnectionInfo.Password = Pwd; Rpt.Database.Tables[i].ApplyLogOnInfo(logOnInfo); }试一下这样来改变数据源楼上说的是PUSH的方法,你也可以考虑一下。但是我觉得如果数据不需要特殊处理的话用PULL方式会更方便! 数据库你不是在web.config中文件配置,需要时在修改就成了,你的程序需要在什么时候作数据库的更换,两个数据库的表结构是一样的吗? 唉,自己搞定了,CSDN又让我失望了(同时还有水晶报表这个破东东)不过还是谢谢大家的帮助:)---------------------------找出了两种解决方法。方法一:这是我找出来了:)不使用水晶报表中的向导连接DB中的TABLE,而是使用命令(Command)方法健报表的SQL。用这种方法后,显示报表时,它就不会再到以前的DB中找数据了。方法二:这是我同事找到的foreach( CrystalDecisions.CrystalReports.Engine.Table tbl in rep.Database.Tables) { log = tbl.LogOnInfo; log.ConnectionInfo = conn; tbl.ApplyLogOnInfo(log); //******** 注意下面这句!关键 tbl.Location = "your db name" + "." + tbl.Location; }就是这个属性,如果你跟踪,它显示的是你的表名,比如叫table1,但实际上,它会在前面加入老DB的名称,这样你取得的就是以前DB的数据,水晶报表是不是很瓜:(最后,为了不改报表,我们用的是第二种方法。-------------------另外,我还想提醒大家一点,如果你是在WEB上用水晶报表,并且要打印或者导出功能(我想,大部分人都需要吧),就不能给报表控件所在的Page以URL的方式传参数。因为水晶报表中打印和导出功能都是通过URL,并且以打开新页面的方式来实现的,而不像其它ASP.NET控件是提交到当前页面的方式实现。-------------------- 忘记说了,为了给水晶报表控件所在页面传参数我都是把参数写入Session中进行传递的,真是没办法:( OpenFileDialog的时候内存怎么释放?? 连接数据库 HttpWebRequest登录CSDN 登录不上 C#的数据类型转换 关于tabcontrol各个tabpage里面的内容的问题 如何动态添加一个Label控件 怎么判断给定的一个完整路径是文件还是文件夹 关于使用SSL的WEB服务客户端程序对服务器的验证问题 谁有移动彩信开发文档啊,给我一份 怎么把光标限制在winform窗体之内呢? 一个有关属性的问题 如何使用 object.GetType().GetMethod() 用参数使用方法
DataSet thisDataSet = new DataSet();
rptCompact rptComp = new rptCompact();
SqlDataAdapter thisAdapter = new SqlDataAdapter(sqlString,thisConn);
thisAdapter.Fill(thisDataSet,"Compact");
rptComp.Database.Tables[0].SetDataSource(thisDataSet);
rptComp.Database.Tables[0].LogOnInfo.ConnectionInfo.ServerName = strServer;
crystalReportViewer1.ReportSource = rptComp;
我不明白你为什么非要更改数据源(即dataset)。在目前.NET提供的水晶报表设计没有此功能。
for(int i=0;i<Rpt.Database.Tables.Count;i++)
{
logOnInfo.ConnectionInfo.ServerName = ServerName;
logOnInfo.ConnectionInfo.DatabaseName = DBName;
logOnInfo.ConnectionInfo.UserID = User;
logOnInfo.ConnectionInfo.Password = Pwd;
Rpt.Database.Tables[i].ApplyLogOnInfo(logOnInfo);
}
试一下这样来改变数据源
楼上说的是PUSH的方法,你也可以考虑一下。但是我觉得如果数据不需要特殊处理的话用PULL方式会更方便!
不过还是谢谢大家的帮助:)---------------------------
找出了两种解决方法。
方法一:这是我找出来了:)
不使用水晶报表中的向导连接DB中的TABLE,而是使用命令(Command)方法健报表的SQL。用这种方法后,显示报表时,它就不会再到以前的DB中找数据了。方法二:这是我同事找到的
foreach( CrystalDecisions.CrystalReports.Engine.Table tbl in rep.Database.Tables)
{
log = tbl.LogOnInfo;
log.ConnectionInfo = conn;
tbl.ApplyLogOnInfo(log);
//******** 注意下面这句!关键
tbl.Location = "your db name" + "." + tbl.Location;
}
就是这个属性,如果你跟踪,它显示的是你的表名,比如叫table1,但实际上,它会在前面加入老DB的名称,这样你取得的就是以前DB的数据,水晶报表是不是很瓜:(最后,为了不改报表,我们用的是第二种方法。-------------------
另外,我还想提醒大家一点,如果你是在WEB上用水晶报表,并且要打印或者导出功能(我想,大部分人都需要吧),就不能给报表控件所在的Page以URL的方式传参数。因为水晶报表中打印和导出功能都是通过URL,并且以打开新页面的方式来实现的,而不像其它ASP.NET控件是提交到当前页面的方式实现。--------------------
我都是把参数写入Session中进行传递的,真是没办法:(