刚学水晶报表,报表来源是在程序中将一个dataset动态绑定到报表中,可是报表显示不出数据,问题出在哪里呢?
代码段如下:
CrystalReportViewer crystalReportViewer1;
CrystalReport1 cr1 = new CrystalReport1();
DataSet ds = new DataSet();
DataTable dt = new DataTable("Customers");dc = dt.Columns.Add( "CustomerID", System.Type.GetType( "System.Int32" ) );
dc.Unique = true;
dc = dt.Columns.Add( "CustomerName", System.Type.GetType( "System.String" ) );
dc.Caption = "Name";
dc = dt.Columns.Add( "CreditLimit", System.Type.GetType( "System.Double" ) );
dc.DefaultValue = 0;
dc.Caption = "Limit";
for( int i=0 ;i<= 20;i++)
{
dt.Rows.Add( new object[] {i, "第"+i.ToString() +"行", 10+i } );
}
ds.Tables.Add(dt);
cr1.SetDataSource( ds );
crystalReportViewer1.ReportSource = cr1;
代码段如下:
CrystalReportViewer crystalReportViewer1;
CrystalReport1 cr1 = new CrystalReport1();
DataSet ds = new DataSet();
DataTable dt = new DataTable("Customers");dc = dt.Columns.Add( "CustomerID", System.Type.GetType( "System.Int32" ) );
dc.Unique = true;
dc = dt.Columns.Add( "CustomerName", System.Type.GetType( "System.String" ) );
dc.Caption = "Name";
dc = dt.Columns.Add( "CreditLimit", System.Type.GetType( "System.Double" ) );
dc.DefaultValue = 0;
dc.Caption = "Limit";
for( int i=0 ;i<= 20;i++)
{
dt.Rows.Add( new object[] {i, "第"+i.ToString() +"行", 10+i } );
}
ds.Tables.Add(dt);
cr1.SetDataSource( ds );
crystalReportViewer1.ReportSource = cr1;
可采用cr1.SetDataSource( ds.Tables["Customers"] );之后,运行出现异常如下:
未处理的“CrystalDecisions.CrystalReports.Engine.InvalidArgumentException”类型的异常出现在 crystaldecisions.crystalreports.engine.dll 中。其他信息: 文件 C:\....\Temp\temp_2ed02530-f015-4802-aaea-dc3ba735ca85.rpt 内出错:
无效表号。
身边没MSDN,没法仔细说,但是你在文档区搜一下,应该可以搜到一大把资料
cr1.SetDataSource 里把你的Datatable赋给他
cr1.SetDataSource( dt );
new 了一个dataset 和datatable ,因为我的目的是把datatable中的数据通过crystalReportViewer1显示出来,不过结果让我失望,显示为空
也不知道是不是可行呢
cr1.SetDataSource( ds );就不会有异常,但如果按你说的:
cr1.SetDataSource( dt );
就会有异常出现;你说的“动态生成CrystalReport内元素的功能”,能不能解析清楚一些呢,可能问题就出在这里吧
回NWC:
可采用cr1.SetDataSource( ds.Tables["Customers"] );之后,运行出现异常如下:
未处理的“CrystalDecisions.CrystalReports.Engine.InvalidArgumentException”类型的异常出现在 crystaldecisions.crystalreports.engine.dll 中。其他信息: 文件 C:\....\Temp\temp_2ed02530-f015-4802-aaea-dc3ba735ca85.rpt 内出错:
无效表号。
在设置数据源表名的时候( cr1.SetDataSource( ds.Tables["Customers"] ) )必须与你建立的数据集中的表名做到高度一致,即 表名、列名等完全一致。
{
zsmxb crReportDocument; .........3.建立报表结构 DataSet dss=new DataSet();
DataTable dt=new DataTable("zsmxb");
dt.Columns.Add("cchbh",System.Type.GetType("System.String"));
dt.Columns.Add("nglf",System.Type.GetType("System.Decimal"));
dt.Columns.Add("ncf",System.Type.GetType("System.Decimal"));
dt.Columns.Add("nqyf",System.Type.GetType("System.Decimal"));
dt.Columns.Add("nzsf",System.Type.GetType("System.Decimal"));
dt.Columns.Add("ntcf",System.Type.GetType("System.Decimal"));
dt.Columns.Add("ngz",System.Type.GetType("System.Decimal"));
dt.Columns.Add("nzjf",System.Type.GetType("System.Decimal"));
dt.Columns.Add("nylf",System.Type.GetType("System.Decimal"));
dt.Columns.Add("nwxf",System.Type.GetType("System.Decimal"));
dt.Columns.Add("nsy",System.Type.GetType("System.Decimal"));
dt.Columns.Add("nqtf",System.Type.GetType("System.Decimal"));
dt.Columns.Add("nxj",System.Type.GetType("System.Decimal"));
dss.Tables.Add(dt); 注意:这里的DataTable dt=new DataTable("zsmxb");这句中表名"zsmxb"要和你的xsd文件中的表名要一样, 同时,dt的字段名、类型,都要和xsd文件一样,否则回产生"查询引擎错误"。4.为这个ds传入数据 for(int i=0;i<this.ds.Tables["zsmxb"].Rows.Count;i++)
{
DataRow dr=dt.NewRow();
dr["cchbh"]=this.ds.Tables["zsmxb"].Rows[i]["cchbh"];
dr["nglf"]=this.ds.Tables["zsmxb"].Rows[i]["nglf"];
dr["ncf"]=this.ds.Tables["zsmxb"].Rows[i]["ncf"];
dr["nqyf"]=this.ds.Tables["zsmxb"].Rows[i]["nqyf"];
dr["nzsf"]=this.ds.Tables["zsmxb"].Rows[i]["nzsf"];
dr["ntcf"]=this.ds.Tables["zsmxb"].Rows[i]["ntcf"];
dr["ngz"]=this.ds.Tables["zsmxb"].Rows[i]["ngz"];
dr["nzjf"]=this.ds.Tables["zsmxb"].Rows[i]["nzjf"];
dr["nylf"]=0;
dr["nwxf"]=0;
dr["nsy"]=0;
dr["nqtf"]=this.ds.Tables["zsmxb"].Rows[i]["nqtf"];
dr["nxj"]=System.Convert.ToDecimal(dr["nglf"].ToString())+System.Convert.ToDecimal(dr["ncf"].ToString(); dt.Rows.Add(dr);
} 这里的ds是同过查询得到的,这里只是举个例子。5.把得到的报表数据源dss绑定到水晶报表。 crReportDocument=new zsmxb();
crReportDocument.SetDataSource(dss);
crystalReportViewer1.ReportSource = crReportDocument;