【发布时间】:2020-10-06 09:32:31
【问题描述】:
我正在尝试通过水晶报表显示来自两个数据表的数据,但我遇到了一个问题,即当两个表中有数据时,报表运行良好,但如果任何一个表中没有数据,则另一个数据表中的数据不显示! 我正在使用下一个代码来填充数据并加载报告:
Public Class FR_Parents_Rep2
Dim xCLS As New ClsMain
Dim xDadp As MySqlDataAdapter
Dim xDS As Ds_Edsa
Private Sub btnView_Click(sender As Object, e As EventArgs) Handles btnView.Click
Try
If xCLS.MyCodes_CboNotNull_Index(Me.CboParents, "TheParent") = True Then Exit Sub
Dim xParentID As Integer = Convert.ToInt32(Me.CboParents.SelectedValue)
Dim xFatoraID, xFrom, xTo As TextObject
Dim xreport As New Rpt_Parents_Rep2
xFatoraID = CType(xreport.ReportDefinition.Sections("Section1").ReportObjects("TxtDate"), TextObject)
xFrom = CType(xreport.ReportDefinition.Sections("Section1").ReportObjects("TxtFrom"), TextObject)
xTo = CType(xreport.ReportDefinition.Sections("Section1").ReportObjects("TxtTo"), TextObject)
xDS = New Ds_Edsa
Dim xSql2 As String
xSql2 = "SELECT
Sum(tbl_parents_payments.TheAmount) AS PrevMadf
FROM tbl_parents_payments
WHERE (((tbl_parents_payments.ParentID)=@ParentID)
AND ((tbl_parents_payments.TheDate)<@Date1));"
Dim xCMD2 As New MySqlCommand(xSql2, Conn)
xCMD2.Parameters.Add("@Date1", MySqlDbType.Date).Value = CDate(Me.TxtFrom.Value)
xCMD2.Parameters.Add("@ParentID", MySqlDbType.Int32).Value = xParentID
xDadp = New MySqlDataAdapter(xCMD2)
xDadp.Fill(xDS.Tables("PrevData2"))
'..............................................................................................
Dim xSql3 As String
xSql3 = "SELECT tbl_parents_payments.TheDate,
tbl_parents_payments.TheAmount
FROM tbl_parents_payments
WHERE (((tbl_parents_payments.TheDate)
Between @Date1 And @Date2) AND
((tbl_parents_payments.ParentID)=@ParentID));"
Dim xCMD3 As New MySqlCommand(xSql3, Conn)
xCMD3.Parameters.Add("@Date1", MySqlDbType.Date).Value = CDate(Me.TxtFrom.Value)
xCMD3.Parameters.Add("@Date2", MySqlDbType.Date).Value = CDate(Me.TxtTo.Value)
xCMD3.Parameters.Add("@ParentID", MySqlDbType.Int32).Value = xParentID
xDadp = New MySqlDataAdapter(xCMD3)
xDadp.Fill(xDS.Tables("ParPay"))
'..............................................................................................
xFatoraID.Text = Now.ToString("mmhhAyyyyMMdd")
xFrom.Text = CStr(Me.TxtFrom.Value.ToString("yyyy/MM/dd"))
xTo.Text = CStr(Me.TxtTo.Value.ToString("yyyy/MM/dd"))
'..............................................................................................
xreport.SetDataSource(xDS)
Crpt.ReportSource = Nothing
Crpt.ReportSource = xreport
Crpt.Refresh()
xDadp.Dispose()
xDS.Dispose()
Catch ex As Exception
MsgBox(Me_MsgErrorStr + vbNewLine + vbNewLine + ex.Message, Me_MsgInfoStyle, Me_MsgCaptionStr)
Finally
Conn.Close()
End Try
End Sub
下一张图片说明了数据集的显示方式。
谢谢,高级
【问题讨论】:
-
水晶报表不是这样工作的,1. 你创建一个数据源,然后创建一个报表,然后向它添加元素,请参阅stackoverflow.com/questions/60015411/…
-
@nbk 你的解决方案对我不起作用,我需要的是在两个日期和指定的父母(ParPay 数据表)之间获得付款,并获得同一个父母的先前付款,问题是如果两个日期之间没有付款,即使有付款也不会显示以前的付款
-
看看我的解决方案是否有效,只要您将数据放入数据集中并将其用作报告 (rpt) 的基础。唯一不起作用的是你的方法。除了向我们展示表格而不是结果之外,也许您可以加入它们,但是作为数据集和两个表格可以用于水晶报告。或任何其他报告工具.. 还请查看推荐中发布的链接
-
@nbk 我不想链接 Datatables ,我认为我创建了这个问题,因为它是由于我不知道的错误而发生的,也许是因为我的方法!所以如果你能帮助我,请做,如果没有,我会感谢你
标签: mysql vb.net crystal-reports