Crystal 当数据集 return 中的 2 个数据表中的 1 个为空行时,报表不显示数据
Crystal Report does not show data when 1 of the 2 datatables in dataset return empty rows
我试图通过 crystal 报告显示来自两个数据 table 的数据,但我遇到了一个问题,即当两个 table 中有数据时,报告正在运行很好,但是如果任何一个 table 中没有数据,另一个数据 table 中的数据将不会显示!
我正在使用下一个代码来填充数据并加载报告:
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
下一张图片说明了数据集的显示方式。
谢谢,进阶
实际上,我认为这里没有人会尝试在 MySql 和 Crystal 方面帮助我们 report else @nbk 并且 nbk 先生还没有准备好与初学者打交道,因为我通过这个看到post 和之前的 post。
无论如何,我在下一个 link 找到了解决方案:
The Solution
祝你好运
我试图通过 crystal 报告显示来自两个数据 table 的数据,但我遇到了一个问题,即当两个 table 中有数据时,报告正在运行很好,但是如果任何一个 table 中没有数据,另一个数据 table 中的数据将不会显示! 我正在使用下一个代码来填充数据并加载报告:
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
下一张图片说明了数据集的显示方式。
谢谢,进阶
实际上,我认为这里没有人会尝试在 MySql 和 Crystal 方面帮助我们 report else @nbk 并且 nbk 先生还没有准备好与初学者打交道,因为我通过这个看到post 和之前的 post。 无论如何,我在下一个 link 找到了解决方案: The Solution
祝你好运