elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  problema de impresion printdocument y hasmorepages= windows forms c#
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: problema de impresion printdocument y hasmorepages= windows forms c#  (Leído 3,158 veces)
rulovive

Desconectado Desconectado

Mensajes: 46



Ver Perfil WWW
problema de impresion printdocument y hasmorepages= windows forms c#
« en: 15 Julio 2021, 00:47 am »

Buen dia... como siempre son mi ultimo recurso porque agoté todas las posibilidades e ideas que tengo... la cosa es asi:

Quiero imprimir un reporte de n numero de registros por edio de una pulsacion de boton (anexo codigo):
Código:
 pagina = 1; //al pulsar el boton el contador de paginas inicia siempre en 1
            vuelta = 0; //al pulsar el boton siempre establezco empezar a leer en la linea 0

            PrintDialog printdialog1 = new PrintDialog();//instancia nueva para crear un dialogo de impresion
            printdialog1.Document = printDocument1;//se asigna la relacion con el documento a imprimir
            DialogResult result = printdialog1.ShowDialog();//se asigna el resultado de la seleccion del dialogo en la variable result


            // ESTO QUE VIENE AQUI EN VERDE ES PARA OBTENER UNA VISTA PREVIA DEL DOCUMENTO A IMPRIMIR...
            PrintPreviewDialog ppd = new PrintPreviewDialog { Document = printDocument1 }; //<-------creamos un nuevo dialogo preview de impresion
            ((Form)ppd).WindowState = FormWindowState.Maximized;
            ppd.ShowDialog();     //<----------sirve para mostrar el preview de la impresion    


            if (result == DialogResult.OK)
               printDocument1.Print();

esa parte funciona a la perfeccion... ahora anexo dos codigos que tienen que ver con las impresiones en el printdocument1, el primero es con un ciclo while:
Código:
 while (vuelta < dataGridView1.RowCount)
            {
                
                
                e.Graphics.DrawString(dataGridView1.Rows[vuelta].Cells[0].Value.ToString(), new Font("Times New Roman", 10), Brushes.Black, x, y + 154);
                e.Graphics.DrawString(dataGridView1.Rows[vuelta].Cells[1].Value.ToString(), new Font("Times New Roman", 10), Brushes.Black, x + 260, y + 154);
                e.Graphics.DrawString(dataGridView1.Rows[vuelta].Cells[2].Value.ToString(), new Font("Times New Roman", 10), Brushes.Black, x + 620, y + 154);
                vuelta++;
                y += 35;
                if (y >= printDocument1.DefaultPageSettings.Bounds.Height - 300)
                {

                    y = printDocument1.DefaultPageSettings.Bounds.Y + 154;
                    e.HasMorePages = true;
                    pagina++;

                    break;
                }
            }
el cual simplemente imprime el listado de lo que hay en el reporte con el siguiente resultado:

es decir.... se obtiene lo que se busca sin problema... aparentemente, ya que cuando imprimo fisicamente las hojas... me aparece asi:

es decir.... solo me aparecen las cabeceras y pie de pagina!! (para lo cual hay un codigo tmb, pero no lo anexé porque con ese no hay problema)

despues de eso intenté hacer el mismo codigo pero evitando el uso del while,asi que puse un bucle foreach en vez de while, ya que descubri que con foreach si me lo imprime fisicamente... anexo codigo
Código:
foreach (DataGridViewRow renglon in dataGridView1.Rows)
            {
                
                if (renglon.Index == dataGridView1.RowCount)
                    break;
                if (y >= printDocument1.DefaultPageSettings.Bounds.Height - 300)
                {

                  
                    e.HasMorePages = true;
                    pagina++;

                    break;
                }

                foreach (DataGridViewCell celda in renglon.Cells)
                {
                    e.Graphics.DrawString(celda.Value.ToString(), new Font("Times New Roman", 10), Brushes.Black, x, y + 154);
                    x += 300;
                }
                x = e.MarginBounds.Left + 5;
                y += 35;

y aunque este codigo si que funciona -ignoro porque el foreach si imprime el listado y el while no, a pesar de que en la previsualizacion si se ve el listado-, el problema con este pedazo de codigo es que si el reporte es de mas de una pagina, entra en un cliclo infinito ya que cuando se dispara de nueva cuenta el printdocument debido al e.hasmorepages=true, el contador del foreach del renglon se vuelve a posicionar a 0... y nunca termina de leer todos los registros, y tengo entendido que al foreach no se le puede asignar un valor inicial a sus variables... por lo que no me sirve.....
ya intenté poner un for en vez del foreach pero sucede exactamente lo mismo que con el while...
los codigos son exactamente los mismos, aplicados a su correspondiente bucle, pero no entiendo porque el while no funciona!!! alguien me puede ayudar? se supone que si el reporte lo guardara como un pdf, se guardaria con todo y sus registros asi como en la imagen, pero yo quiero imprimirlo fisicamente :s


« Última modificación: 15 Julio 2021, 00:57 am por rulovive » En línea

rulovive

Desconectado Desconectado

Mensajes: 46



Ver Perfil WWW
Re: problema de impresion printdocument y hasmorepages= windows forms c#
« Respuesta #1 en: 21 Julio 2021, 21:36 pm »

hola nenes. actualizo el tema para notificar que ya lo he solucionado... el error estaba en el codigo del boton, no del bucle. Sucede que el printpreviewdialog y el printdialog disparaban ambos el printdocument, por lo que toda la informacion se perdia o se ciclaba, no lo se y no me interesa... el caso es que al eliminar el codigo para printpreview todo funcionó como debia....
me dan lastima y asco xD... pero para su escarmiento no pueden borrar esta respuesta porque en ella se encuentra la solución, y junto con ella el insulto hacia ustedes xd


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con forms php
PHP
zhynar_X 6 3,030 Último mensaje 4 Julio 2007, 00:11 am
por дٳŦ٭
swing o windows forms??
Java
vacio 7 6,550 Último mensaje 8 Noviembre 2007, 06:34 am
por 43H4FH44H45H4CH49H56H45H
Problema con System.Windows.Forms.Keys y Space(LOF(1))
.NET (C#, VB.NET, ASP)
chacKos 7 6,787 Último mensaje 14 Marzo 2010, 13:13 pm
por chacKos
SendMessageA en c++ con windows forms
Programación C/C++
hackstyle18 0 2,862 Último mensaje 2 Octubre 2010, 19:11 pm
por hackstyle18
Windows Forms
Programación General
Mela 0 2,080 Último mensaje 23 Octubre 2016, 05:56 am
por Mela
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines