C sharp - printDocument + Nueva Pagina

 
Vista:
Imágen de perfil de Rafael
Val: 13
Ha aumentado su posición en 4 puestos en C sharp (en relación al último mes)
Gráfica de C sharp

printDocument + Nueva Pagina

Publicado por Rafael (6 intervenciones) el 06/12/2017 18:47:51
Buenos Dias a Todos, soy nuevo en esto de los foros, y estoy aquí para ayudar tanto como para pedir ayuda jeje.

Les cuento, resulta que vengo desde el Visual Basic 6 y estoy metiendome ahora con C# y hasta ahora ya hago muchas cosas, como validar campos, funciones, clases, consultas a base de datos, etc. pero surge un problema con la impresion, bueno ya imprimo, lo que no logro hacer es que al consultar una tabla de 1000 registros me los imprima en varias hojas, siempre imprime la misma hoja repetidamente.

Este seria mi codigo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
{
    int j = 25;
    using (MySqlConnection cnn = new MySqlConnection(ConfigurationManager.ConnectionStrings["conexion"].ToString()))
    {
 
        MySqlCommand cmd = cnn.CreateCommand();
 
        cnn.Open();
        cmd.CommandText = "SELECT numero, nombres FROM test";
        cmd.ExecuteNonQuery();
 
        MySqlDataReader reader = cmd.ExecuteReader();
 
            e.Graphics.PageUnit = GraphicsUnit.Millimeter;
            e.Graphics.DrawString("SYSTEM ADMIN", new Font("Courier New", 12), new SolidBrush(Color.Black), new RectangleF(10, 10, printDocument1.DefaultPageSettings.PrintableArea.Width, printDocument1.DefaultPageSettings.PrintableArea.Height));
            e.Graphics.DrawString("PRUEBA DE IMPRESION", new Font("Courier New", 12), new SolidBrush(Color.Black), new RectangleF(10, 15, printDocument1.DefaultPageSettings.PrintableArea.Width, printDocument1.DefaultPageSettings.PrintableArea.Height));
 
        while (reader.Read())
        {
 
            e.Graphics.DrawString(reader.GetString("numero_corredor") + new string(' ', 10 - Convert.ToInt32(reader.GetString("numero").Length)) + reader.GetString("nombres"), new Font("Courier New", 12), new SolidBrush(Color.Black), 10, j);
            j += 5;
            i++;
 
            e.HasMorePages = true;
        }
 
        reader.Close();
        cnn.Close();
    }
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Enrique
Val: 189
Bronce
Ha mantenido su posición en C sharp (en relación al último mes)
Gráfica de C sharp

printDocument + Nueva Pagina

Publicado por Enrique (69 intervenciones) el 07/12/2017 17:02:03
Lo que pasa es que debes tener en cuenta que con tu configuración de tu graphic solo mecionas una hoja.

Lo que deberías hacer es:
+Contar cuantas lineas caben en cada pagina
+Contar número de lineas
+Con el número de lineas, generar x número de paginas
+Comenzar a imprimir
+Al llegar al número máximo por hoja, brincar a la siguiente pagina


Creo que con eso bastara
Acá encontrarás tod ala info acerca de ese control:
https://msdn.microsoft.com/en-us/library/system.drawing.printing.printdocument(v=vs.110).aspx
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rafael
Val: 13
Ha aumentado su posición en 4 puestos en C sharp (en relación al último mes)
Gráfica de C sharp

printDocument + Nueva Pagina

Publicado por Rafael (6 intervenciones) el 07/12/2017 19:23:36
Gracias Enrique por Responder pero, el problema es que siempre me imprime los primeros 50 registros en todas las paginas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Enrique
Val: 189
Bronce
Ha mantenido su posición en C sharp (en relación al último mes)
Gráfica de C sharp

printDocument + Nueva Pagina

Publicado por Enrique (69 intervenciones) el 07/12/2017 20:53:48
Ok, ya vi cual es el tema.
Yo sacaría
1
e.HasMorePages = true;
de tu While.
Por qué?
Nota: Esta propiedad crea n número de paginas según las lineas que quepan en c/paginas y después la imprime en cada pagina.

R= Porque cada repetición del while le mandas la instrucción
y cuando el evento detecta que las lineas se excedierón crea una nueva pagina

Sin en cambio al terminar el loop has generado la instrucción x numero de veces
Genera las paginas necesarias según el arreglo a imprimir, y posteriormente ejecuta la función de imprimir en cada pagina x numero de veces.

Osea esta propiedad solo de debe asignar una vez. Si solo si Sepas cuantas lineas caben en tu hoja, y el número de lineas a imprimir exeda el numero de lineas que caben en la pagina.

Esta algo rebuscada mi explicación pero en el link que te pase arriba te dice como funciona esto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Rafael
Val: 13
Ha aumentado su posición en 4 puestos en C sharp (en relación al último mes)
Gráfica de C sharp

printDocument + Nueva Pagina

Publicado por Rafael (6 intervenciones) el 08/12/2017 20:05:26
Listo, solucionado, cree una lista y luego recorro la lista e imprimo.

Gracias por todo amigo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar