Estoy realizando un crystal report, el crystal report se llena con un dataset, donde es un objeto xsd donde le defino previamente sus datatables, la cuestión es que realizo una consulta y el dataset debería en buena teoría llenarse con la misma, pero resulta que no lo hace sino que queda vacío, como hago para llenar ese dataset desde el código para luego simplemente pasarselo lleno al crystal report y generar la consulta?.
Este es el código que tengo, el cuál recibe como parámetro un entero, este mismo retorna un dataset, el cuál según yo debería llenar al item xsd que definí con el diseñador de visual studio, porque el crystal jala ese datasource de ese dataset y de ahí simplemente debería desplegar los campos
No lo hago desde el wizard poque queda completamente suspeditado a una ruta del archivo de access y bueno para hacer un datasource dinámico es un poco engorroso desde el wizard, entonces simplemente decidí hacerlo desde un dataset y que en tiempo de ejecución lo llene
Código
Public Function llenar_dataset(ByVal fact As Integer) As DataSet Dim cmd2 As OleDb.OleDbCommand = Nothing Dim ds As New DS_Tablas conn.Open() cmd = New OleDb.OleDbCommand("SELECT * FROM tbl_HEADER WHERE ID_CONSECUTIVO = @Id", conn) cmd.Parameters.AddWithValue("Id", fact) cmd.ExecuteNonQuery() Dim da As OleDbDataAdapter = New OleDbDataAdapter(cmd) cmd2 = New OleDb.OleDbCommand("SELECT * FROM tbl_DETAIL WHERE COD_FACTURA = @Id_det", conn) cmd2.Parameters.AddWithValue("Id_det", fact) cmd2.ExecuteNonQuery() Dim da2 As OleDbDataAdapter = New OleDbDataAdapter(cmd2) da.Fill(ds, "tbl_HEADER") da2.Fill(ds, "tbl_DETAIL") conn.Close() Return ds End Function
Acá el código que genera el crystal, el cuál la ruta y lo demás lo hace bien, simplemente sale vacío
Código
CrReport = New CrystalDecisions.CrystalReports.Engine.ReportDocument() ds = obj_data.llenar_dataset(Convert.ToInt32(lblConsecutivo.Text)) CrReport.FileName = "CrystalReport1.rpt" 'Ruta del reporte str_path_factura = System.Windows.Forms.Application.StartupPath & "\" & "CrystalReport1.rpt" CrReport.Load(str_path_factura) 'Esto es código provisional, simplemente es para saber si el dataset está lleno o no If ds.Tables("tbl_HEADER").Rows.Count() = 0 Or ds.Tables("tbl_DETAIL").Rows.Count() Then MsgBox("Tablas vacías") Else MsgBox("Tu dataset está lleno chico") MsgBox(ds.Tables("tbl_HEADER").Rows.Count().ToString) MsgBox(ds.Tables("tbl_DETAIL").Rows.Count().ToString) End If CrReport.SetDataSource(ds.Tables(0)) CrReport.SetDataSource(ds.Tables(1)) 'CrReport.PrintToPrinter(False, False, False, False)
Pues acá está el código pero le dataset sale vacío y por tanto el reporte igual.
GRACIAS POR LEER