Solucion listados crystal report (vb.Net)

kaz
12 de Julio del 2004
Como mucho tieneis problemas con lo de los listados en crystal report os dejo este codigo que consiste en un formulario en que le pasas un dataset y un report document y te lmuestra el listado

el dataset y al report document son propiedades, el codigo de este form es el siguiente (copiar y pegar):

_____________________________________________

Imports CrystalDecisions.Shared
Imports CrystalDecisions.CrystalReports.Engine

Public Class formReport
Inherits System.Windows.Forms.Form

#Region " Código generado por el Diseñador de Windows Forms "

Public Sub New()
MyBase.New()

'El Diseñador de Windows Forms requiere esta llamada.
InitializeComponent()

'Agregar cualquier inicialización después de la llamada a InitializeComponent()

End Sub

'Form reemplaza a Dispose para limpiar la lista de componentes.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub

'Requerido por el Diseñador de Windows Forms
Private components As System.ComponentModel.IContainer

'NOTA: el Diseñador de Windows Forms requiere el siguiente procedimiento
'Puede modificarse utilizando el Diseñador de Windows Forms.
'No lo modifique con el editor de código.
Friend WithEvents CrystalReportViewer1 As CrystalDecisions.Windows.Forms.CrystalReportViewer
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.CrystalReportViewer1 = New CrystalDecisions.Windows.Forms.CrystalReportViewer
Me.SuspendLayout()
'
'CrystalReportViewer1
'
Me.CrystalReportViewer1.ActiveViewIndex = -1
Me.CrystalReportViewer1.Dock = System.Windows.Forms.DockStyle.Fill
Me.CrystalReportViewer1.Location = New System.Drawing.Point(0, 0)
Me.CrystalReportViewer1.Name = "CrystalReportViewer1"
Me.CrystalReportViewer1.ReportSource = Nothing
Me.CrystalReportViewer1.Size = New System.Drawing.Size(816, 606)
Me.CrystalReportViewer1.TabIndex = 0
'
'formReport
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(816, 606)
Me.Controls.Add(Me.CrystalReportViewer1)
Me.Name = "formReport"
Me.Text = "Form1"
Me.ResumeLayout(False)

End Sub

#End Region

Private dts As DataSet
Private rpt As ReportDocument

Public Property rpDataset() As DataSet
'
' contiene el dataset
'
Get
Return (dts)
End Get

Set(ByVal Value As DataSet)
dts = Value
End Set

End Property

Public Property rpReport() As ReportDocument
'
' contiene el crytalreport
'
Get
Return (rpt)
End Get

Set(ByVal Value As ReportDocument)
rpt = Value
End Set

End Property

Private Sub formReport_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

Try

'Asignamos el dataset a un documento de crystal report
rpt.SetDataSource(rpDataset)

'Asignamos el documento del crystal report al CrystalReportViewer
Me.CrystalReportViewer1.ReportSource = rpReport

Catch ex As Exception
MsgBox(ex.Message)
End Try

End Sub

End Class

_______________________________________________

y para hacer la llamada a este formulario, de la siguiente forma:

Dim crystalForm As formReport = New formReport

'Titulo de el formulario
crystalForm.Text = "Clientes"

'Indicamos el origen de los datos i el rpt que vamos a usar
crystalForm.rpDataset = Me.DsClientes1 'Dataset

crystalForm.rpReport = New crClientes 'Crystal Report

crystalForm.ShowDialog()

________________________________

Espero que os sirva de ayuda

Dani
12 de Julio del 2004
He copiado y pegado tu ejemplo y me sigue saliendo lo que me ponia tal y como lo tenia echo yo, pero no se porque nadie me lo responde :(

" Error al abrir un conjunto de filas"

No se si es al rellenar el dataset o no se que. El formReport esta calcado al tuyo y en la llamada he modificado algo para rellenar el dataset, echale un ojo por favor y dime en que fallo...


Private Sub BtnPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnPrint.Click
Dim oDataAdapter As OdbcDataAdapter
Dim oDataSet As DataSet

' crear conexión
Dim oConexion As New OdbcConnection("DSN=Incidencias")
' crear adaptador
oDataAdapter = New OdbcDataAdapter("SELECT * FROM Incidencia", oConexion)
' crear commandbuilder
Dim oCB As OdbcCommandBuilder = New OdbcCommandBuilder(oDataAdapter)
' crear dataset
oDataSet = New DataSet()
oDataAdapter.Fill(oDataSet)




Dim crystalForm As formReport = New formReport()

'Titulo de el formulario
crystalForm.Text = "Clientes"

'Indicamos el origen de los datos i el rpt que vamos a usar
crystalForm.rpDataset = oDataSet 'Dataset

crystalForm.rpReport = New CrIncidencias() 'Crystal Report

crystalForm.ShowDialog()



End Sub

kaz
12 de Julio del 2004
asegurate de que la conexion este abierta y cerrarla al terminar

oConexion.open() / oConexion.close()

el OdbcCommandBuilder no haria falta que lo pusieras, ya que lo que hace es crearte las instrucciones de insert, update y delete y para visualizar unos datos no te haria falta, aunque esto no es motivo de error

el crystal report de donde optiene los datos?? si es de un dataset lo estas haciendo mal (kizas es este el error), al crear el crystal report debes asignarle un dataset de donde "cogera" los datos, este dataset dbe existir por lo que no lo puedes crear por codigo en tiempo de ejecucion, sino crealo con el asistente y luego se lo mandas (lo k seria el oDataSet)

como mas informacion ese dataset solo debe tener la estructura, los datos los puedes modificar en tiempo de diseño añadiendole clausulas WHERE tantas como kieras

Dani
12 de Julio del 2004
A ver estoy intentando sacar un Report a partir de los datos de una tabla en Mysql. La tabla se llama 'Incidencia' y esta dentro del database 'Incidencias' ( la S final es la diferencia, soy muy original... lo se ).

Tengo bastantes dudas sobretodo en cuanto al connecion string, que supongo que esta bien pues no me has comentado nada.
Luego decirte que al crear el Dataset no se me abre ningun asistente, y haciendo click derecho solo me sale copiar, pegar...propiedades y ya esta.

He puesto el open y el close como me has dicho, y creando el Dataset1 en el diseño pero me sigue poniendo el mismo error. Ahora el codigo esta asi, claro esta que el dataset1 esta en el diseño ehh.


Private Sub BtnPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnPrint.Click
Dim oDataAdapter As OdbcDataAdapter

' crear conexión
Dim oConexion As New OdbcConnection("DSN=Incidencias")
oConexion.Open()
' crear adaptador
oDataAdapter = New OdbcDataAdapter("SELECT DNI FROM Incidencia", oConexion)
' crear dataset
oDataAdapter.Fill(DataSet1)


Dim crystalForm As formReport = New formReport()

'Titulo de el formulario
crystalForm.Text = "Incidencias"

'Indicamos el origen de los datos i el rpt que vamos a usar
crystalForm.rpDataset = DataSet1 'Dataset

crystalForm.rpReport = New CrIncidencias() 'Crystal Report

crystalForm.ShowDialog()

oConexion.Close()



End Sub

Laura
12 de Julio del 2004
Yo estoy igual!!! Ayuda please.

kaz
12 de Julio del 2004
sobre la conexion yo nunca he trabajado con mysql osea que te lo datr epo bueno porque sabras mas tu que yo

si lo que haces es obtener directamente los datos del crystal report de una tabla mysql mi ejemplo no te sirve, ya que yo utilizo un dataset, para que mi ejemplo funcione tienes que hacerlo desde un dataset

Dani
12 de Julio del 2004
Yo lo estoy haciendo con Dataset tambien, no ves como hago el fill y tal?? la conexion se crea bien porque en el resto del programa hago consultas y eso, pero es que el dataset y el puñetero crystal se me atragantan.