Ver Mensaje Individual
  #2 (permalink)  
Antiguo 24/10/2006, 11:14
Avatar de erick_arcini
erick_arcini
 
Fecha de Ingreso: julio-2005
Ubicación: Jaltenco / DF
Mensajes: 1.723
Antigüedad: 19 años, 7 meses
Puntos: 50
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
__________________
Mejoremos nuestro país, ayudemos al planeta... próximamente.

Última edición por erick_arcini; 24/10/2006 a las 11:37