C1Report is the data-based banded report in which the Detail Section is rendered for each record in the data-source. Since, the rendering of the Detail Section takes place exclusively for each record, it is difficult to have the following implementations:
Now the question is, why and when would we require the above two scenarios. This blog helps you in finding the answer to the same. Lately, one of our customers wanted to check if a column had duplicate records and if yes, then highlight them. Since, we cannot get the value of the cell from next row, we cannot determine if it's a duplicate value. Alternate way is to compare the present value with the previously fetched records and check for multiple existence. However, we can only set the back-color for the to-be rendered field and cannot format the previously rendered Detail Sections or its fields. So neither of the above options meet the requirement. The only trick to achieve the required behavior is to add the VBscript code in the OnFormat property of the Detail Section. However, this time it is implemented in code and not through C1ReportDesigner. A simple approach is to get all the values in a List and then loop through each item of the List, checking if the same appears more than once. If the value exists multiple times, then all the occurrences of that value will be highlighted in the resultant report. Use the given code snippet to implement the requirement :
For i = 0 To Table1.Rows.Count - 1
list.Add(Table1.Rows(i)("Values"))
Next
For Each item As String In list
If Not list2.Contains(item) Then
If list.LastIndexOf(item) <> list.IndexOf(item) Then
list2.Add(item)
End If
End If
Next
For Each str As String In list2
If flag = 0 Then
script\_n = script\_n + "Values= """ + str + """"
ElseIf flag = 1 Then
script\_n = script\_n + " or Values= """ + str + """"
End If
flag = 1
Next
C1Report.Load("New_RepeatValues.xml", "Table1 Report")
Dim script As String = ""
script = "If " + script_n + " Then" + vbCrLf + "ValuesCtl.BackColor=rgb(155,155,250)" + vbCrLf + "else" + vbCrLf + " ValuesCtl.BackColor=rgb(255,255,255)" + vbCrLf + "endif"
C1Report.Sections("Detail").OnFormat = script
C1PrintPreviewControl1.Document = C1Report
Following output is generated using the above code: Refer to the attached samples for complete implementation. Download Sample - VB Download Sample - CS