Crystal Reports只显示最后一列



我想在水晶报告中显示一个表,但它只显示最后一列,这是我的代码:

Try
Cursor = Cursors.WaitCursor
Dim id As Integer = 1
Dim Report1 As New PrintStockReport
Dim dt As DataTable = New DBConnect().selectdata( _
"SELECT StockTable.StockRef, StockTable.StockCat FROM StockTable;")

'Report1.SetDataSource(dt)
For i As Integer = 0 To dt.Rows.Count - 1
Report1.SetParameterValue("StockID", id)
Report1.SetParameterValue("StockRef", dt.Rows(i)(0).ToString)
Report1.SetParameterValue("StockCat", dt.Rows(i)(1).ToString)
id += 1
Next
CrystalReportViewer1.ReportSource = Report1
Cursor = Cursors.Default
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try

但是,当我将Datasource设置为显示" the report has no tables"时,有人能向我解释为什么我会遇到这个问题吗?感谢

Report1.SetDataSource(dt)

首先让我们修复VB代码。完全删除For/Next循环,然后取消对其上面一行的注释

Try
Cursor = Cursors.WaitCursor
Dim id As Integer = 1
Dim Report1 As New PrintStockReport
Dim dt As DataTable = New DBConnect().selectdata( _
"SELECT StockTable.StockRef, StockTable.StockCat FROM StockTable;")

Report1.SetDataSource(dt)

CrystalReportViewer1.ReportSource = Report1
Cursor = Cursors.Default
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try

这将正确地将数据表绑定到作为数据源的Report1对象。现在,您需要在设计器中通过从报表中删除参数字段来修复报表。只有当您需要用户在运行时将输入传递到报表中时,才使用参数字段。例如,如果我正在制作一个向用户显示单个财务期间数据的报告,并且我希望它足够灵活,可以处理任何期间,我会使用参数字段要求用户在执行报告时提供该期间作为输入。如果您查看报表设计器中的字段资源管理器,您应该会看到";数据库字段";。展开后,应显示定义为报表数据库的一个或多个表。展开表格后,将显示可用于报告的字段列表。将要在报告中显示的字段拖到它们应该显示的部分。

一旦完成,您的报告应该会起作用。不过,这假设您的数据库是在报表设计器中的数据库专家中定义的。

最新更新