Cyrstal Reports subreport Section hiding
-
Dear all, I have a crystal report which has a lot of detaildections. In 3 sections there are 3 subreports. (1 subreport per section). If there is no data available I would like to hide the section. This works perfectly for the no subreport sections. It also works perfectly if there is no data in the whole subreport. However in some cases the subreport also has section and if there is not data for that one particular section I would like to hide it. I can do this, but then it hides that section for all records in that subreport. I only want it for that specific section. I hope that makes sense. If you need more info please ask. My code is as follows:
Do While Not rs.EOF
bFound = True
With dsCVForClient
.dtPersonalDetails.Rows.Add(rs.Fields(0).Value, rs.Fields(1).Value, rs.Fields(2).Value, rs.Fields(3).Value, rs.Fields(4).Value, rs.Fields(5).Value, rs.Fields(6).Value, rs.Fields(7).Value, rs.Fields(8).Value, rs.Fields(9).Value, rs.Fields(10).Value, rs.Fields(11).Value, rs.Fields(12).Value, rs.Fields(13).Value, rs.Fields(14).Value, rs.Fields(15).Value, rs.Fields(16).Value, rs.Fields(17).Value, rs.Fields(18).Value, rs.Fields(19).Value, rs.Fields(20).Value, rs.Fields(21).Value, rs.Fields(22).Value, rs.Fields(23).Value, rs.Fields(24).Value, sClient, sVacancy, sConsultant)
rsInHouse = gCnn.Execute("select regno, tertiaryinstitute, course, duration, completed, subjects from tertiaryeducation where regno = '" & sRegNo & "'")
Do While Not rsInHouse.EOF
For i = 0 To 5
If rsInHouse.Fields(i).Value = "" Then sTertiaryEducation(i) = "Not specified" Else sTertiaryEducation(i) = rsInHouse.Fields(i).Value
Next
.dtInHouseOtherCourses.Rows.Add(sTertiaryEducation(0), sTertiaryEducation(1), sTertiaryEducation(2), sTertiaryEducation(3), sTertiaryEducation(4), sTertiaryEducation(5))
rsInHouse.MoveNext()
Loop
rsJobHistory = gCnn.Execute("select regno, company, jobtitle, datestarted, dateleft, tasks, reasonleft, duties from jobhistory where regno = '" & sRegNo & "' order by datestarted DESC")
Do While Not rsJobHistory.EOF
For i = 0 To 6
If rsJobHistory.Fields(i).Value = "" Then sJobHistory(i) = "Not specified" Else sJobHistory(i) = rsJobHistory.Fields(i).Value
Next
If rsJobHist -
Dear all, I have a crystal report which has a lot of detaildections. In 3 sections there are 3 subreports. (1 subreport per section). If there is no data available I would like to hide the section. This works perfectly for the no subreport sections. It also works perfectly if there is no data in the whole subreport. However in some cases the subreport also has section and if there is not data for that one particular section I would like to hide it. I can do this, but then it hides that section for all records in that subreport. I only want it for that specific section. I hope that makes sense. If you need more info please ask. My code is as follows:
Do While Not rs.EOF
bFound = True
With dsCVForClient
.dtPersonalDetails.Rows.Add(rs.Fields(0).Value, rs.Fields(1).Value, rs.Fields(2).Value, rs.Fields(3).Value, rs.Fields(4).Value, rs.Fields(5).Value, rs.Fields(6).Value, rs.Fields(7).Value, rs.Fields(8).Value, rs.Fields(9).Value, rs.Fields(10).Value, rs.Fields(11).Value, rs.Fields(12).Value, rs.Fields(13).Value, rs.Fields(14).Value, rs.Fields(15).Value, rs.Fields(16).Value, rs.Fields(17).Value, rs.Fields(18).Value, rs.Fields(19).Value, rs.Fields(20).Value, rs.Fields(21).Value, rs.Fields(22).Value, rs.Fields(23).Value, rs.Fields(24).Value, sClient, sVacancy, sConsultant)
rsInHouse = gCnn.Execute("select regno, tertiaryinstitute, course, duration, completed, subjects from tertiaryeducation where regno = '" & sRegNo & "'")
Do While Not rsInHouse.EOF
For i = 0 To 5
If rsInHouse.Fields(i).Value = "" Then sTertiaryEducation(i) = "Not specified" Else sTertiaryEducation(i) = rsInHouse.Fields(i).Value
Next
.dtInHouseOtherCourses.Rows.Add(sTertiaryEducation(0), sTertiaryEducation(1), sTertiaryEducation(2), sTertiaryEducation(3), sTertiaryEducation(4), sTertiaryEducation(5))
rsInHouse.MoveNext()
Loop
rsJobHistory = gCnn.Execute("select regno, company, jobtitle, datestarted, dateleft, tasks, reasonleft, duties from jobhistory where regno = '" & sRegNo & "' order by datestarted DESC")
Do While Not rsJobHistory.EOF
For i = 0 To 6
If rsJobHistory.Fields(i).Value = "" Then sJobHistory(i) = "Not specified" Else sJobHistory(i) = rsJobHistory.Fields(i).Value
Next
If rsJobHistWhat logic are you using to hide/unhide the section ? I just don't see it. :confused: You have to remember that when you create a "Supression" formula in Crystal, you have to make sure that you have logic to both hide (supress=true) and unhide (supress=false). Regards, David
-
What logic are you using to hide/unhide the section ? I just don't see it. :confused: You have to remember that when you create a "Supression" formula in Crystal, you have to make sure that you have logic to both hide (supress=true) and unhide (supress=false). Regards, David
Hi David, Thank you for your reply. Ok the reason you dont see it is becuase maybe my brain is on overload and I posted the section it populates the dataset. The reason being is I thought maybe it could be done there somewhere. But on second thought it cant be done there. A short sample:
If dsCVForClient.dtPersonalDetails(0).ComputerPackages = "" Then rpt.DetailSection49.SectionFormat.EnableSuppress = True
If dsCVForClient.dtInHouseOtherCourses.Count = 0 Then rpt.DetailSection50.SectionFormat.EnableSuppress = True
To get to the subreport, i used: rpt.Subreports(0).ReportDefinition.Sections(5).SectionFormat.EnableSuppress = True But it led to the seciont being suppressed for all the records in the subreport. The personaldetails will only ever have 1 record for this report, but the subreports could have anything from 0 to 100 records.
-
Hi David, Thank you for your reply. Ok the reason you dont see it is becuase maybe my brain is on overload and I posted the section it populates the dataset. The reason being is I thought maybe it could be done there somewhere. But on second thought it cant be done there. A short sample:
If dsCVForClient.dtPersonalDetails(0).ComputerPackages = "" Then rpt.DetailSection49.SectionFormat.EnableSuppress = True
If dsCVForClient.dtInHouseOtherCourses.Count = 0 Then rpt.DetailSection50.SectionFormat.EnableSuppress = True
To get to the subreport, i used: rpt.Subreports(0).ReportDefinition.Sections(5).SectionFormat.EnableSuppress = True But it led to the seciont being suppressed for all the records in the subreport. The personaldetails will only ever have 1 record for this report, but the subreports could have anything from 0 to 100 records.
If appears that your logic sets the suppression to "TRUE", but never sets it to "FALSE". I think the answer is to put an Else clause and set the suppression to FALSE. give it a try. :cool:
-
If appears that your logic sets the suppression to "TRUE", but never sets it to "FALSE". I think the answer is to put an Else clause and set the suppression to FALSE. give it a try. :cool:
Thank you, that was a great suggestion. The bad news is though, it didnt work. What happens then is it enabled the section for all the records again. So if the last record did have a vaule in the field it unhid the section for all the records.
For i = 0 To dsCVForClient.dtInHouseOtherCourses.Count - 1 If dsCVForClient.dtInHouseOtherCourses(i).Subjects = "" Then rpt.Subreports(0).ReportDefinition.Sections(5).SectionFormat.EnableSuppress = True Else rpt.Subreports(0).ReportDefinition.Sections(5).SectionFormat.EnableSuppress = False Next
I seem to think the secret lies in the rpt.Subreports(0).ReportDefinition is there some way to talk to a record in that subreport? :confused:
-
Thank you, that was a great suggestion. The bad news is though, it didnt work. What happens then is it enabled the section for all the records again. So if the last record did have a vaule in the field it unhid the section for all the records.
For i = 0 To dsCVForClient.dtInHouseOtherCourses.Count - 1 If dsCVForClient.dtInHouseOtherCourses(i).Subjects = "" Then rpt.Subreports(0).ReportDefinition.Sections(5).SectionFormat.EnableSuppress = True Else rpt.Subreports(0).ReportDefinition.Sections(5).SectionFormat.EnableSuppress = False Next
I seem to think the secret lies in the rpt.Subreports(0).ReportDefinition is there some way to talk to a record in that subreport? :confused:
You can write a fomula to supress the "detail" section of the subreport, effectively suppressing the output for each record as you see fit.
-
You can write a fomula to supress the "detail" section of the subreport, effectively suppressing the output for each record as you see fit.
-
Dear all, I have a crystal report which has a lot of detaildections. In 3 sections there are 3 subreports. (1 subreport per section). If there is no data available I would like to hide the section. This works perfectly for the no subreport sections. It also works perfectly if there is no data in the whole subreport. However in some cases the subreport also has section and if there is not data for that one particular section I would like to hide it. I can do this, but then it hides that section for all records in that subreport. I only want it for that specific section. I hope that makes sense. If you need more info please ask. My code is as follows:
Do While Not rs.EOF
bFound = True
With dsCVForClient
.dtPersonalDetails.Rows.Add(rs.Fields(0).Value, rs.Fields(1).Value, rs.Fields(2).Value, rs.Fields(3).Value, rs.Fields(4).Value, rs.Fields(5).Value, rs.Fields(6).Value, rs.Fields(7).Value, rs.Fields(8).Value, rs.Fields(9).Value, rs.Fields(10).Value, rs.Fields(11).Value, rs.Fields(12).Value, rs.Fields(13).Value, rs.Fields(14).Value, rs.Fields(15).Value, rs.Fields(16).Value, rs.Fields(17).Value, rs.Fields(18).Value, rs.Fields(19).Value, rs.Fields(20).Value, rs.Fields(21).Value, rs.Fields(22).Value, rs.Fields(23).Value, rs.Fields(24).Value, sClient, sVacancy, sConsultant)
rsInHouse = gCnn.Execute("select regno, tertiaryinstitute, course, duration, completed, subjects from tertiaryeducation where regno = '" & sRegNo & "'")
Do While Not rsInHouse.EOF
For i = 0 To 5
If rsInHouse.Fields(i).Value = "" Then sTertiaryEducation(i) = "Not specified" Else sTertiaryEducation(i) = rsInHouse.Fields(i).Value
Next
.dtInHouseOtherCourses.Rows.Add(sTertiaryEducation(0), sTertiaryEducation(1), sTertiaryEducation(2), sTertiaryEducation(3), sTertiaryEducation(4), sTertiaryEducation(5))
rsInHouse.MoveNext()
Loop
rsJobHistory = gCnn.Execute("select regno, company, jobtitle, datestarted, dateleft, tasks, reasonleft, duties from jobhistory where regno = '" & sRegNo & "' order by datestarted DESC")
Do While Not rsJobHistory.EOF
For i = 0 To 6
If rsJobHistory.Fields(i).Value = "" Then sJobHistory(i) = "Not specified" Else sJobHistory(i) = rsJobHistory.Fields(i).Value
Next
If rsJobHistHere is a basic idea of how I imagine you are using Crystal Reports. 1) Using Visual Studio (VS) you create a Crystal Report design (.rpt file) 2) Using VS you have your application display the report using the CrystalReportViewer. My example code is actually from an ASP.Net application, but the idea is the same.
Dim rpt As New ReportDocument
rpt.Load("\myReport1")
'For example purposes, imagine that the myDataSet is populated already
rpt.SetDataSource(myDataSet)
CrystalReportViewer1.ReportSource = rpt
Based on this design, you would put the hide/unhide logic in the Crystal ".RPT" file. You don't have to do anything programatically with VB. Is this how you are working with Crystal ? :~ From your examples, I don't think so. My impression is that the VB.net code should: 1) Create the dataset 2) Invoke the Crystal Report via the CrystalReportViewer and let Crystal do the formatting. Are we on the same page? :confused:
-
Here is a basic idea of how I imagine you are using Crystal Reports. 1) Using Visual Studio (VS) you create a Crystal Report design (.rpt file) 2) Using VS you have your application display the report using the CrystalReportViewer. My example code is actually from an ASP.Net application, but the idea is the same.
Dim rpt As New ReportDocument
rpt.Load("\myReport1")
'For example purposes, imagine that the myDataSet is populated already
rpt.SetDataSource(myDataSet)
CrystalReportViewer1.ReportSource = rpt
Based on this design, you would put the hide/unhide logic in the Crystal ".RPT" file. You don't have to do anything programatically with VB. Is this how you are working with Crystal ? :~ From your examples, I don't think so. My impression is that the VB.net code should: 1) Create the dataset 2) Invoke the Crystal Report via the CrystalReportViewer and let Crystal do the formatting. Are we on the same page? :confused:
Hi David, We are on the same page. That is basically how mine works too...
Dim rpt As New rptCVForClient()
'Code to hide sections
Try
rpt.SetDataSource(dsCVForClient)
crvReport.ReportSource = rpt
Catch Excep As Exception
MessageBox.Show(Excep.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End TryThe problem is I have unbound text boxes in the sections that make the suppressing via property setting not work. I should probably change that, but I have never made a bound label in crystal reports... as er.. weird as that may sound.
-
Hi David, We are on the same page. That is basically how mine works too...
Dim rpt As New rptCVForClient()
'Code to hide sections
Try
rpt.SetDataSource(dsCVForClient)
crvReport.ReportSource = rpt
Catch Excep As Exception
MessageBox.Show(Excep.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End TryThe problem is I have unbound text boxes in the sections that make the suppressing via property setting not work. I should probably change that, but I have never made a bound label in crystal reports... as er.. weird as that may sound.
Wow. I think you may have made your life harder by not using bound fields. I would start with working on getting all of your fields on the report to be bound to fields in the dataset. Or you can create formula fields that are based on fields in the dataset. The report shouldn't be that complicated.
-
Wow. I think you may have made your life harder by not using bound fields. I would start with working on getting all of your fields on the report to be bound to fields in the dataset. Or you can create formula fields that are based on fields in the dataset. The report shouldn't be that complicated.
-
Hi David, thank you! The report is working as it should. Thanks for your perserverance and help! :thumbsup::thumbsup:
Good to hear that everything is working now. I'm sure it is a big relief. On to the next challenge. :)