Hola que tal, pues en cierto sentido ha quedado resuelto, como?, bueno aqui va una pequeña explicación:
DataTable dt = new DataTable("Afiliados"); //creamos un datatable con el nombre de la tabla, de preferencia la tabla que se este vinculando
//creamos un datarow que tendra las columnas y el objeto llamado "datos" es un objeto data set que cuenta con la tabla original de mi base de datos, en este caso yso una SQL, pero puede ser cualquiera
DataRow dr;
//DataSet rs = new DataSet();
datos rs2 = new datos();
//creamos las columnas del DATATABLE
dt.Columns.Add("folio", System.Type.GetType("System.String"));
dt.Columns.Add("nombre", System.Type.GetType("System.String"));
dt.Columns.Add("apaterno", System.Type.GetType("System.String"));
dt.Columns.Add("amaterno", System.Type.GetType("System.String"));
dt.Columns.Add("curp", System.Type.GetType("System.String"));
//en las siguientes columnas el tipo de datos es "System.Byte[]"dt.Columns.Add("archivofotografia", System.Type.GetType("System.Byte[]"));
dt.Columns.Add("archivofirma", System.Type.GetType("System.SByte[]"));
try
//iniciamos con la carga de un solo registro para el reporte, es lo que yo deseo, hay como gusten ustedes adecuarlo
{
conexion.Open();
SqlCommand comando = new SqlCommand("Select * From afiliados where folio = '" + var + "'", conexion);
SqlDataReader lector;
lector= comando.ExecuteReader();
while (linea.Read())
{
//se instancia datarow.
dr = dt.NewRow();
dr["folio"] = lector.GetString(1);
dr["nombre"] = lector.GetString(2);
dr["apaterno"] = lector.GetString(3);
dr["amaterno"] = lector.GetString(4);
dr["curp"] = lector.GetString(8);
//la funcion tomaBytes crea los bytes con la ruta especificada en la tabla original de sql server, en este caso no estoy guardando las imagenes directo en la tabla sino que esta solo la ruta de ese archivo, la funcion esta mas abajo
dr["archivofotografia"] = tomaBytes(lector.GetString(14));
dr["archivofirma"] = tomaBytes(lector.GetString(15));
dt.Rows.Add(dr);
//en especial esta linea, importa los datos obtenidos de la consulta anterior al data set que nosotros agregamos al proyecto, en mi caso "datos.xsd"
[B]
rs2.Afiliados.ImportRow(dr);[/B]
}
linea.Close();
}
catch (SystemException ex)
{
}
finally
{
if(conexion != null)
{
conexion.Close();
}
}
//reporte es el nombre del reporte "reporte.rpt" que ustedes crearon
reporte hoja = new reporte();
hoja.SetDataSource(rs2);
//crvMostrar.Zoom(50);
crvMostrar.ShowZoomButton = true;
crvMostrar.ReportSource = hoja;//este es el crystalreportviewer que va a colocar la hoja
}
//la que sigue es la funcion para obtener los bytes
public static byte[] tomaBytes(string archivin)
{
FileStream obtenArchivo= new FileStream(archivin, FileMode.Open);
BinaryReader br = new BinaryReader(obtenArchivo);
byte[] imagenBytes = new byte[(int)obtenArchivo.Length];
// int valor = imagenBytes .Length;
br.Read(imagenBytes , 0, (int)obtenArchivo.Length);
br.Close();
obtenArchivo.Close();
return imagenBytes ;
}
en el data set que ustedes crearon, cambien los tipos de datos de las columnas que deseen antes de crear el reporte, guarden los cambios y creen el reporte, inserten los campos, diseñen el reporte y lixto, ya esta creado, cualquier problema, pues posteen y ampliaremos las dudas