测试时,连接的数据库应该是Credit2_3
程序(web程序,用asp.net)执行时,希望取得Credit2_3中的数据,但取出来的数据都是Credit2中的数据
我试了各种方法都不行。比如
...
foreach( CrystalDecisions.CrystalReports.Engine.Table tbl in rep.Database.Tables)
{
log = tbl.LogOnInfo;
log.ConnectionInfo = conn;
tbl.ApplyLogOnInfo(log);
}
this.CrystalReportViewer1.ReportSource = rep;
...(用这种方法时,跟踪,tbl中的连接参数都已经被改成新的了,但数据还是Credit2中的)
而用这种方法:
...
ReportDocument crReport = new ReportDocument();
string strPath=@"C:\Inetpub\wwwroot\Credit2\Enterprise\Reports\employee.rpt";
crReport.Load(strPath);
crReport.SetDataSource(dt);
CrystalReportViewer1.ReportSource = crReport;
CrystalReportViewer1.DataBind();
...(跟踪,dt中的数据是新的,但最后显示出来的页面中的数据还是旧数据)
另:我设计报表时,并没有将数据一起保存。
我猜测,是报表设计时某个选项没设置对
高手们,救命啊!!!多谢!
16 个解决方案
#1
up
#2
up
只能up.自己也很想知道。
只能up.自己也很想知道。
#3
up
#4
我这样做没遇到问题:
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 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;
#5
你的报表中有没有参数字段啊?如果有的话设置一下ReportViewer的参数字段值!
#6
没有参数。
如果我在设计报表时,在设计器中更改了数据源为Credit2_3,那么取得的数据就是Credit2_3的。但是--我不可能在每次改数据库名字后,为每个报表都重新打开报表,更改一次数据源嘛。
真的要抓狂了
自己UP
如果我在设计报表时,在设计器中更改了数据源为Credit2_3,那么取得的数据就是Credit2_3的。但是--我不可能在每次改数据库名字后,为每个报表都重新打开报表,更改一次数据源嘛。
真的要抓狂了
自己UP
#7
目前.NET提供的水晶报表设计并不能满足你的需求。
#8
楼上的,你是在开玩笑吧。
我哭5555555555~~~~~~~~~~~~~~~~~~
我哭5555555555~~~~~~~~~~~~~~~~~~
#9
我搜索了csdn上所有与“水晶”,“Crystal”相关的帖子,都没有找到我需要的
怎么办嘛5~~~~~~~~~~
怎么办嘛5~~~~~~~~~~
#10
急
不可能连换个DB都不行吧
不可能连换个DB都不行吧
#11
如果你动态的连接数据库到dataset,你在水晶报表中用到的数据源dataset和你的数据库没有直接的关系,你可以用同一个dataset连接不同的数据库,只要查询出的字段名和类型一样就可以。
我不明白你为什么非要更改数据源(即dataset)。在目前.NET提供的水晶报表设计没有此功能。
我不明白你为什么非要更改数据源(即dataset)。在目前.NET提供的水晶报表设计没有此功能。
#12
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方式会更方便!
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方式会更方便!
#13
数据库你不是在web.config中文件配置,需要时在修改就成了,你的程序需要在什么时候作数据库的更换,两个数据库的表结构是一样的吗?
#14
我的问题和楼主是一样的,就像楼上老兄说的
我的两个数据库是一摸一样的
应用程序都能访问 就是一到水晶报表就提示打开行集失败
我都快急死了!救命呀
我的两个数据库是一摸一样的
应用程序都能访问 就是一到水晶报表就提示打开行集失败
我都快急死了!救命呀
#15
唉,自己搞定了,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控件是提交到当前页面的方式实现。
--------------------
不过还是谢谢大家的帮助:)
---------------------------
找出了两种解决方法。
方法一:这是我找出来了:)
不使用水晶报表中的向导连接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控件是提交到当前页面的方式实现。
--------------------
#16
忘记说了,为了给水晶报表控件所在页面传参数
我都是把参数写入Session中进行传递的,真是没办法:(
我都是把参数写入Session中进行传递的,真是没办法:(
#1
up
#2
up
只能up.自己也很想知道。
只能up.自己也很想知道。
#3
up
#4
我这样做没遇到问题:
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 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;
#5
你的报表中有没有参数字段啊?如果有的话设置一下ReportViewer的参数字段值!
#6
没有参数。
如果我在设计报表时,在设计器中更改了数据源为Credit2_3,那么取得的数据就是Credit2_3的。但是--我不可能在每次改数据库名字后,为每个报表都重新打开报表,更改一次数据源嘛。
真的要抓狂了
自己UP
如果我在设计报表时,在设计器中更改了数据源为Credit2_3,那么取得的数据就是Credit2_3的。但是--我不可能在每次改数据库名字后,为每个报表都重新打开报表,更改一次数据源嘛。
真的要抓狂了
自己UP
#7
目前.NET提供的水晶报表设计并不能满足你的需求。
#8
楼上的,你是在开玩笑吧。
我哭5555555555~~~~~~~~~~~~~~~~~~
我哭5555555555~~~~~~~~~~~~~~~~~~
#9
我搜索了csdn上所有与“水晶”,“Crystal”相关的帖子,都没有找到我需要的
怎么办嘛5~~~~~~~~~~
怎么办嘛5~~~~~~~~~~
#10
急
不可能连换个DB都不行吧
不可能连换个DB都不行吧
#11
如果你动态的连接数据库到dataset,你在水晶报表中用到的数据源dataset和你的数据库没有直接的关系,你可以用同一个dataset连接不同的数据库,只要查询出的字段名和类型一样就可以。
我不明白你为什么非要更改数据源(即dataset)。在目前.NET提供的水晶报表设计没有此功能。
我不明白你为什么非要更改数据源(即dataset)。在目前.NET提供的水晶报表设计没有此功能。
#12
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方式会更方便!
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方式会更方便!
#13
数据库你不是在web.config中文件配置,需要时在修改就成了,你的程序需要在什么时候作数据库的更换,两个数据库的表结构是一样的吗?
#14
我的问题和楼主是一样的,就像楼上老兄说的
我的两个数据库是一摸一样的
应用程序都能访问 就是一到水晶报表就提示打开行集失败
我都快急死了!救命呀
我的两个数据库是一摸一样的
应用程序都能访问 就是一到水晶报表就提示打开行集失败
我都快急死了!救命呀
#15
唉,自己搞定了,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控件是提交到当前页面的方式实现。
--------------------
不过还是谢谢大家的帮助:)
---------------------------
找出了两种解决方法。
方法一:这是我找出来了:)
不使用水晶报表中的向导连接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控件是提交到当前页面的方式实现。
--------------------
#16
忘记说了,为了给水晶报表控件所在页面传参数
我都是把参数写入Session中进行传递的,真是没办法:(
我都是把参数写入Session中进行传递的,真是没办法:(