The Idea is to create Dynamic Report with Cristal Report Using Checkbox to select specific fields to send to the report.
Any help please.
I am trying this code but It says Custmers is not defined I do not understand it seems some "IMPORT" Should be done.
Imports System.Data
Imports System.Linq
Imports System.Configuration
Imports System.Data.SqlClient
Imports CrystalDecisions.CrystalReports.Engine
Public Class Report_Test
Inherits System.Web.UI.Page
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
If Not Me.IsPostBack Then
Me.BindReport()
End If
End Sub
Private Sub BindReport()
Dim query As String = "SELECT TOP 5 "
Dim isSelected As Boolean = chkColumns.Items.Cast(Of ListItem)().Count(Function(i) i.Selected = True) > 0
If Not isSelected Then
chkColumns.Items(0).Selected = True
End If
For Each item As ListItem In chkColumns.Items
If item.Selected Then
query += item.Value + ","
isSelected = True
End If
Next
query = query.Substring(0, query.Length - 1)
query += " FROM Customers"
Dim crystalReport As New ReportDocument()
CrystalReportViewer1.DisplayGroupTree = False
crystalReport.Load(Server.MapPath("~/CustomerReport.rpt"))
Dim dsCustomers As Customers = GetData(query, crystalReport)
crystalReport.SetDataSource(dsCustomers)
CrystalReportViewer1.ReportSource = crystalReport
End Sub
Private Function GetData(query As String, crystalReport As ReportDocument) As Customers
Dim conString As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
Dim cmd As New SqlCommand(query)
Using con As New SqlConnection(conString)
Dim dsCustomers As New Customers()
cmd.Connection = con
con.Open()
Using sdr As SqlDataReader = cmd.ExecuteReader()
'Get the List of all TextObjects in Section2.
Dim textObjects As List(Of TextObject) = crystalReport.ReportDefinition.Sections("Section2").ReportObjects.OfType(Of TextObject)().ToList()
For i As Integer = 0 To textObjects.Count - 1
'Set the name of Column in TextObject.
textObjects(i).Text = String.Empty
If sdr.FieldCount > i Then
textObjects(i).Text = sdr.GetName(i)
End If
Next
'Load all the data rows in the Dataset.
While sdr.Read()
Dim dr As DataRow = dsCustomers.Tables(0).Rows.Add()
For i As Integer = 0 To sdr.FieldCount - 1
dr(i) = sdr(i)
Next
End While
End Using
con.Close()
Return dsCustomers
End Using
End Function
Protected Sub Columns_Changed(sender As Object, e As EventArgs)
Me.BindReport()
End Sub
End Class
B>Sanon