2011-06-30 34 views
0

我将一个ASP.Net应用程序从VS 2003转换为VS 2005作为起点。该应用程序使用Crystal Reports并使用ADO.Net绑定到强类型数据集(XSD)。我不得不改变一些Crystal Code来使用C​​rystal的新版本。现在,当我运行该页面时,报告生成了,但没有填充任何字段。我看到很多人遇到同样的问题,但没有真正的解决方案。我决定创建一个全新的项目,将同样的事情从VS 2003到2005的对话中删除,作为问题的一个可能原因。所以我的示例程序有一个运行查询的按钮,填充数据集并将其分配给报告。该报告仅显示标题。代码如下。我不知道接下来要尝试什么。Crystal Reports和强类型数据集产生空报告

DataSet1 ds = new DataSet1(); 

    SqlConnection conn = 
     new SqlConnection(ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString); 

    SqlDataAdapter da = new SqlDataAdapter("select * from mytable", conn); 
    da.Fill(ds); 

    ReportDocument rep = new ReportDocument(); 
    rep.Load(Server.MapPath("crystalreport.rpt")); 
    rep.SetDataSource(ds); 

    CrystalReportViewer1.ReportSource = rep; 
    CrystalReportViewer1.RefreshReport(); 

我还基于相同的MYTABLE表创建DataSet1.XSD。除了报告中的字段没有填充外,我没有发现任何错误或任何错误。

回答

1

需要一些调试才能确定它为什么不适合你。您是否在调试会话中查看了结果数据集,并查看它是否填写正确?

下面是一个很好的工作方法的例子。

SqlConnection cnn; 
string connectionString = null; 
string sql = null; 

connectionString = "data source=SERVERNAME;initial catalog=DATABASENAME;user id=USERNAME;password=PASSWORD;"; 
cnn = new SqlConnection(connectionString); 
cnn.Open(); 
sql = "select * from mytable"; 
SqlDataAdapter dscmd = new SqlDataAdapter(sql, cnn); 
DataSet1 ds = new DataSet1(); 
dscmd.Fill(ds, "mytable"); 
cnn.Close(); 

CrystalReport1 objRpt = new CrystalReport1(); 
objRpt.SetDataSource(ds.Tables[1]); 
crystalReportViewer1.ReportSource = objRpt; 
crystalReportViewer1.Refresh(); 
+0

乍一看,你的代码与我的几乎一样,除了一个小细节之外......你可以在SetDataSource中指定显式表格,我将报表发送给整个DataSet。一旦我将其更改为表引用,所有内容都很好地填充。谢谢。 –

+0

我想这可能是它不工作的关键。我是一个大副本/粘贴的人,所以我喜欢有完整的示例来构建,因为我总是忘记了这样的小细节。很高兴帮助。 –

相关问题