ayuda por favor con crystal y subreportes

25/01/2007 - 16:08 por Rick | Informe spam
Que tal amigos tengo unas dudas con crystal, he creado 1 reporte principal
que se llena con dataset, contiene 5 tablas relacionadas de las cuales
obtiene informacion

depues de eso, hice otro dataset que contiene 3 tablas que no estan
relacionadas
hice 3 reportes inviduales a partir de cada tabla de este segundo dataset,
para llenarse cada talbla recibe un parametro int, en este caso dicho
parametro para cada tabla es idObra

meti esos 3 reportes como subreportes del reporte principal, (cada
subreporte aparte de los datos muestra texto como encabezados etc) y lige el
campo idObra como parametro del reporte principal hacia el campo idObra de
cada subreporte

al ejecutar mi aplicacion solo lleno el dataset que muestra el reporte
principal, yo pense que al momento de pasar como parametro el valor de
idObra cada subreporte se llenaria, pero no se que esta pasando ya que al
ejecutar el reporte principal ese si se llena y de los 3 subreportes solo el
ultimo me muestra los campos texto (encabezados etiquetas, etc) pero de los
otros 2 subreportes anteriores no muestra ni los campos texto, segun yo
aunque no trajera datos mi reporte deberia de mostrarme de esos 2
subreportes los campos tipo texto (suponiendo que no existan datos para
mostrar)

Lo que no se es si debo hacer o no, ni en que momento, llenar ese segundo
dataset que contiene 3 tablas, ya que con mi codigo solo mando llamar al
reporte principal e internamente crystal llama a los otros 3

alguien me puede orientar por favor?

Saludos
 

Leer las respuestas

#1 Rick
25/01/2007 - 21:02 | Informe spam
Okas!!

de hecho hice unas pruebas y por ejemplo declare esto
(lo hice con vb, porque estaba ayudando a un compañero, hoy en la tarde lo
hago para para c#)

Imports System.Data

Imports System.Data.SqlClient



Public Class Form2

Public idCustomer As String



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

Dim Reporte As New CrystalReport1

Dim CI As New NorthwindDataSetTableAdapters.CategoriesTableAdapter

Dim CD As New NorthwindDataSetTableAdapters.DataTable1TableAdapter

Dim CS As New NorthwindDataSetTableAdapters.SuppliersTableAdapter

Dim dsi As New NorthwindDataSet

Dim ds2 As New NorthwindDataSet

Try


CI.Fill(dsi.Categories)

CD.Fill(dsi.DataTable1, idCustomer)

CS.Fill(dsi.Suppliers)

Reporte.SetDataSource(dsi)

Reporte.Subreports.Item("cr2.rpt").SetDataSource(dsi)

Reporte.Subreports.Item("cr3.rpt").SetDataSource(dsi)

crv1.ReportSource = Reporte

Catch ex As Exception

MessageBox.Show(ex.Message)

End Try

End Sub

End Class


y si funciono!!
Muchas Gracias Octavio!!


Saludos!!



"Octavio Hernandez" escribió en el mensaje
news:

No sé si entiendo bien tu pregunta.
Lo que por supuesto sí puedes es asociarle al adaptador una sentencia SQL
con condiciones del tipo:

SELECT * FROM Authors WHERE PublicationDate >= @P1

para no traer todos los libros, sino solo los que van a hacer falta para
el
informe. Eso es más eficiente que traerse toda la tabla y luego filtrar en
el
informe.

Slds - Octavio


"Rick" escribió en el mensaje
news:
Octavio otra pregunta rapida, mi dataset siempre lo lleno asi
//Build a connection string

string connectionString= "";

connectionString = "Provider=SQLOLEDB;";

connectionString += "Server=Server1;Database=pubs;";

connectionString += "User ID=myuser;Password=mypassword";

//Create and open a connection using the connection string

adoOleDbConnection = new OleDbConnection(connectionString);

//Build a SQL statement to query the datasource

string sqlString = "";

sqlString = "Select * From authors";

//Retrieve the data using the SQL statement and existing connection

adoOleDbDataAdapter = new OleDbDataAdapter(sqlString,
adoOleDbConnection);

//Create a instance of a Dataset

dataSet = new DataSet();

//Fill the dataset with the data retrieved. The name of the table

//in the dataset must be the same as the table name in the report.

adoOleDbDataAdapter.Fill(dataSet, "authors");


//Create an instance of the strongly-typed report object

crReportDocument = new CrystalReport1();

//Pass the populated dataset to the report

crReportDocument.SetDataSource(dataSet);

//Set the viewer to the report object to be previewed.

crystalReportViewer1.ReportSource = crReportDocument;


existe otra forma de pasarle solo el parametro que necesito a la consulta
del tableadapter para no tener que hace la consulta sql llene el table
adapter? algo asi como cuando arrastras el dataset a tu ventana y tienes
disponible el metodo fill ?





"Octavio Hernandez" escribió en el
mensaje news:
Rick,

Tienes *TU* que asignar el origen a todos los subinformes justo como lo
haces
para el informe principal. Podría ser algo así:

reportDocument1.Subreports.Item("SubInforme1").SetDataSource(ds) ;

Slds - Octavio



"Rick" escribió en el mensaje
news:
Que tal amigos tengo unas dudas con crystal, he creado 1 reporte
principal que se llena con dataset, contiene 5 tablas relacionadas de
las cuales obtiene informacion

depues de eso, hice otro dataset que contiene 3 tablas que no estan
relacionadas
hice 3 reportes inviduales a partir de cada tabla de este segundo
dataset, para llenarse cada talbla recibe un parametro int, en este
caso dicho parametro para cada tabla es idObra

meti esos 3 reportes como subreportes del reporte principal, (cada
subreporte aparte de los datos muestra texto como encabezados etc) y
lige el campo idObra como parametro del reporte principal hacia el
campo idObra de cada subreporte

al ejecutar mi aplicacion solo lleno el dataset que muestra el reporte
principal, yo pense que al momento de pasar como parametro el valor de
idObra cada subreporte se llenaria, pero no se que esta pasando ya que
al ejecutar el reporte principal ese si se llena y de los 3 subreportes
solo el ultimo me muestra los campos texto (encabezados etiquetas, etc)
pero de los otros 2 subreportes anteriores no muestra ni los campos
texto, segun yo aunque no trajera datos mi reporte deberia de mostrarme
de esos 2 subreportes los campos tipo texto (suponiendo que no existan
datos para mostrar)

Lo que no se es si debo hacer o no, ni en que momento, llenar ese
segundo dataset que contiene 3 tablas, ya que con mi codigo solo mando
llamar al reporte principal e internamente crystal llama a los otros 3

alguien me puede orientar por favor?

Saludos













Preguntas similares