Dim conn As New ConnectionInfo Dim log As TableLogOnInfo Dim tbl As Table Dim cn As New SqlClient.SqlConnection cn.ConnectionString = System.Configuration.ConfigurationSettings.AppSettings.Item("ConnectionString") With conn .ServerName = cn.DataSource .DatabaseName = cn.Database .UserID = ConfigurationSettings.AppSettings.Item("uid") .Password = ConfigurationSettings.AppSettings.Item("pwd") End With For Each tbl In rpt.Database.Tables log = tbl.LogOnInfo log.ConnectionInfo = conn tbl.ApplyLogOnInfo(log) Next
用dataset的一個table來填充而不是直接用dataset,應不會出現這樣的問題了!!
to cdyxh(@@+++knife+++@@) 如果用dataset的一个table来填充,那水晶报表可不能用其中的数据了。 大家有作过用DATASET做数据源,做水晶报表吧,能否给些例子!最好是C#
应该不会有那个问题的 首先你要确认水晶报表的数据库位置是否是你的ado。net数据集 然后检查一下你的数据集是否可以填充 Good luck!
我是用的单独安装的水晶报表,先要把程序生成的DataSet转成*.xsd文件,然后在水晶报表里以该文件为数据源建立.rpt文件(如果你是和vs捆绑的水晶报表,可以在建立rpt文件时直接引用那个DataSet,不用转.xsd文件了),后面的操作就按部就班了,给你点例子,都是我用过的,没有问题: using CrystalDecisions.Shared ; using CrystalDecisions.CrystalReports .Engine ;
public class WebForm2 : System.Web.UI.Page { protected CrystalDecisions.Web.CrystalReportViewer CrystalReportViewer1; protected CrystalDecisions.CrystalReports.Engine.ReportDocument reportDocument1;
private void Page_Load(object sender, System.EventArgs e) { string strProvider = "Server=(local);DataBase=pubs;UID=sa;PWD=19"; SqlConnection MyConn = new SqlConnection(strProvider); MyConn.Open(); string strSel = "Select * from employee where fname like 'P%'"; SqlDataAdapter MyAdapter = new SqlDataAdapter(strSel,MyConn); DataSet1 ds = new DataSet1();//这个DataSet1在结构上最好跟水晶表的一致, //路径可以不同 MyAdapter.Fill(ds,"employee) MyConn.Close(); reportDocument1.Load("d:\\Report2.rpt"); reportDocument1.SetDataSource(ds); this.CrystalReportViewer1.ReportSource = reportDocument1; CrystalReportViewer1.DataBind();
Dim log As TableLogOnInfo
Dim tbl As Table
Dim cn As New SqlClient.SqlConnection
cn.ConnectionString = System.Configuration.ConfigurationSettings.AppSettings.Item("ConnectionString") With conn
.ServerName = cn.DataSource
.DatabaseName = cn.Database
.UserID = ConfigurationSettings.AppSettings.Item("uid")
.Password = ConfigurationSettings.AppSettings.Item("pwd")
End With For Each tbl In rpt.Database.Tables
log = tbl.LogOnInfo
log.ConnectionInfo = conn
tbl.ApplyLogOnInfo(log)
Next
大家有作过用DATASET做数据源,做水晶报表吧,能否给些例子!最好是C#
首先你要确认水晶报表的数据库位置是否是你的ado。net数据集
然后检查一下你的数据集是否可以填充
Good luck!
using CrystalDecisions.Shared ;
using CrystalDecisions.CrystalReports .Engine ;
public class WebForm2 : System.Web.UI.Page
{
protected CrystalDecisions.Web.CrystalReportViewer CrystalReportViewer1;
protected CrystalDecisions.CrystalReports.Engine.ReportDocument reportDocument1;
private void Page_Load(object sender, System.EventArgs e)
{
string strProvider = "Server=(local);DataBase=pubs;UID=sa;PWD=19";
SqlConnection MyConn = new SqlConnection(strProvider);
MyConn.Open();
string strSel = "Select * from employee where fname like 'P%'";
SqlDataAdapter MyAdapter = new SqlDataAdapter(strSel,MyConn);
DataSet1 ds = new DataSet1();//这个DataSet1在结构上最好跟水晶表的一致,
//路径可以不同
MyAdapter.Fill(ds,"employee) MyConn.Close();
reportDocument1.Load("d:\\Report2.rpt"); reportDocument1.SetDataSource(ds);
this.CrystalReportViewer1.ReportSource = reportDocument1;
CrystalReportViewer1.DataBind();
{
A4500XSD xsd = new A4500XSD();
A4500XSD.TableA4500XSDRow rw;
xsd.TableA4500XSD.Clear(); try
{
System.Data.SqlClient.SqlParameter[] oParam =
{
new System.Data.SqlClient.SqlParameter("@dateFm",System.Data.SqlDbType.DateTime ),
new System.Data.SqlClient.SqlParameter("@dateTo",System.Data.SqlDbType.DateTime),
new System.Data.SqlClient.SqlParameter("@Resend",System.Data.SqlDbType.Int)
};
oParam[0].Value = this.dateFm.Value;
oParam[1].Value = this.dateTo.Value;
oParam[2].Value = this.rdo1.Checked ? 1 : 0; System.Data.DataTable oDataTable =new System.Data.DataTable("A4500M"); bool oSuccess = MainModules.pDataRead.ExecuteSP("A4500Rpt1",oParam,oDataTable);
if(oSuccess)
{
if(oDataTable.Rows.Count>0)
{
rw = xsd.TableA4500XSD.NewTableA4500XSDRow();
rw.Doc_Type = row[0].ToString();
rw.Doc_No = row[1].ToString();
rw.Doc_Date = row[2].ToString();
rw.Currency=row[3].ToString();
rw.Amount = System.Convert.ToDecimal(row[4].ToString());
rw.Ex_Rate=System.Convert.ToDecimal(row[5].ToString());
if (row[6].ToString() =="")
rw.Cr= row[0].ToString() == "IB" ? "" : "NO";
else
rw.Cr = row[6].ToString();
if (row[7].ToString() == "")
rw.Dr=row[0].ToString() == "IA" ? "" : "NO";
else
rw.Dr = row[7].ToString();
rw.Order_No = row[8].ToString();
rw.Art_No=row[9].ToString();
if (rw.Cr == "NO" || rw.Dr == "NO")
{
xsd.TableA4500XSD.AddTableA4500XSDRow(rw);
}
else
{
rw = null;
} xsd.AcceptChanges();
if (xsd.TableA4500XSD.Rows.Count >0)
{
string ReportFileName = Application.StartupPath + @"\..\..\" + @"Reports\"+"A4500Rpt.rpt" ;
MainModules.pRptDoc.Load(ReportFileName);
MainModules.pRptDoc.SetDataSource(xsd);
frmView fView = new frmView();
fView.rptView.ReportSource = MainModules.pRptDoc;
fView.rptView.Zoom(7);
fView.ShowDialog();
}
}
catch(Exception exp)
{
MainModules.ShowMsg("Failure Export Data to Text File ! Error is :" +exp.Message);
}
}
theCrystalReport1.SetDataSource(dataSet11);但又出现了新问题:
http://expert.csdn.net/Expert/topic/2688/2688920.xml?temp=.4953882我想是否与楼上 gshope(北京.Net) 说的"//这个DataSet1在结构上最好跟水晶表的一致,"
有关系,但不知怎样才能使它们一致请高手继续指点!!!
MyAdapter.Fill(dataSet11,"表名");//这个DataSet1在结构上最好跟水晶表的一致
http://www.chinabyte.com/20020618/1616438.shtml
我想要,能不能发到
谢谢~~~~~~
不好意思,邮箱写错了,下面为正确的
[email protected]
谢谢~~~~~~
可能是table的名字錯了,訪問不到數據
从 ADO.NET 数据集制作报表从数据库创建数据集对象 1. 在项目中新建一个架构文件: a. 在解决方案资源管理器中,右击项目名,指向“添加”,然后单击“添加新项”。 b. 在“添加新项”对话框的“类别”区域,展开文件夹,然后选择“数据”。 c. 在“模板”区域选择“数据集”。 d. 接受默认名称 Dataset1.xsd。 这就创建了一个新的架构文件 (Dataset1.xsd),以后将用它来生成强类型数据集。该架构文件将显示在 ADO.NET 数据集设计器中。 2. 指定数据库位置: a. 在服务器资源管理器中,右击“数据连接”并选择“添加连接”。 b. 在“数据链接属性”对话框中,单击“提供程序”选项卡,然后选择一个提供程序(例如 Microsoft OLE DB Provider for SQL Server)。 c. 单击“连接”选项卡,然后指定您的数据库所在位置。在所需位置输入服务器和登录信息。 d. 单击“确定”按钮。 此时,您的数据库及其表和字段就出现在服务器资源管理器的“数据连接”节点下面。 3. 在解决方案资源管理器中,双击 Dataset1.xsd (如果它尚不是活动视图)。 Dataset1.xsd 现在应显示在“数据集”选项卡中。 4. 若要为数据集建立架构,请将需要的表从服务器资源管理器中拖动到 Dataset1.xsd 的“数据集”选项卡上。 5. 单击“保存 Dataset1.xsd”来保存“Dataset1.xsd”文件。 6. 在“生成”菜单上,单击“生成”为项目生成数据集对象。 ADO.NET 数据集对象提供数据的描述,从它可以向 Crystal report 添加表。使用 Crystal Report Designer 中的“数据库专家”从 ADO.NET 数据集对象添加表。 请在使用“报表专家”创建新报表时调用“数据库专家”。或者,要从一个已经使用 ADO.NET 建立好的报表中访问“数据库专家”,请在 Report Designer 中右击,指向“数据库”,然后单击“添加/删除数据库”。将报表连接到 ADO.NET 数据集对象 1. 在“数据库专家”中,展开“项目数据”文件夹。 2. 展开“ADO.NET 数据集”文件夹。 3. 选择所需数据集对象。 例如,如果当时使用的是从项目“WindowsApplication1”的架构文件“Dataset1.xsd”中生成的数据集对象,则应该选择“WindowsApplication1.Dataset1”。 4. 选择要向报表中添加的表,和使用其他数据源一样。