Reportviewer vb net - cambio de márgenes con código

Estoy intentando imprimir un report. Rdlc de vb NET 2008 en un reportviewer, pero no sé por qué, los márgenes por defecto que me pone el control son de 28cm por cada lado, y los quiero cambiar en tiempo de ejecución, mediante código (trasparente al usuario) para que ajuste la página bien y no imprima 2 páginas.
La propiedad para obtener esos valores es muy fácil pero para cambiarlo es imposible, he buscado en 1000 sitios y nadie sabe..
¿Alguna idea?

2 respuestas

Respuesta
1
Yo siempre el margen lo configuro en el reporte, no lo hago por código
El tema es que en el reporte, es decir, el archivo rdlc, le digo que las dimensiones tienen que ser las de un Din A4 (28x21cm) y cuando lo intento visualizar desde el reportviewer, me añade a mayores los márgenes y claro, se me descuadra todo. Es que no sé por qué narices me pone unos márgenes enormes y sobre todo, por qué no puedo modificarlos de ninguna forma más que cuando ya estoy ejecutando la aplicación desde el botón de la barra de herramientas del reportviewer (Page properties).
He probado a reducir el tamaño en el rdlc para que al añadirme los márgenes me quede más o menos justo pero da igual, aún así me añade más margen y se me vuelve a descuadrar.
¿Alguna solución?
Muchas gracias
Revisa la configuración de la página en al impresora predeterminada que tienes, es posible que al momento de grabar quede con esos margenes, pero no veo la razón de lo que expones
La primera vez que imprimí, me sacó 3 hojas cuando me tenía que sacar 1 sola, porque se descuadró debido a los margenes que te he comentado que se desfasaron. Ahora simplemente imprimo a PDF para no gastar hojas a lo bobo, con lo que no veo la relación con lo que me dices de la configuración por defecto de la impresora.
Yo supongo que debería dar igual la impresora con la que imprimas, dado que el reportviewer te permite mediante un botón cambiar el tipo de página, orientación y márgenes, que es lo que yo necesito cambiar con código para que el usuario no tenga que molestarse continuamente en ponerlo al imprimir.
No sé si me explico
Verifica que tiu reportes este dentro de los margenes de la página y del reporte en el diseñador
Yo en el diseñador del rdlc sólo veo la propiedad size, en lo referente al tamaño, y le he puesto el tamaño de un A4 (29.7x21). Aparte de esto, en el objeto reportviewer que va a ser el contenedor del rdlc, en la propiedad margins, he puesto a All = 0, pero cuando arranco la aplicación, no funciona y me lo descuadra, y si entro en las propiedades de la página desde el botón de arriba, me sale que los margenes tienen un valor de 24,3 o algo así, y no sé por qué..
Reduce el tamaño de los objetos dentro del reporte, no las propiedades del reporte, y trata de que quede centrado, porque cuando los objetos que hacen parte del reporte quedan por fuera de los margenes se imprime una nueva página
Los he reducido e incluso he reducido el tamaño del reporte para que quede dentro de la página aun quitándole los 2 cm que le pone por defecto de márgenes, y le da =, se sigue saliendo de la página la parte derecha del reporte. Hasta que no entras en las propiedad en tiempo de ejecución y lo cambias, no se ajusta.
O sea que puedes cambiar esos parámetros desde tu programa si lo haces en tiempo de ejecución, si lo puedes hacer entonces cuale es problema, cambiale los margenes hasta que deje de imprimir la página en blanco
El problema es que no me lo deja cambiar con código, lo tiene que hacer el usuario a través de la ventana de propiedades de página cada vez, y quiero que salga por defecto, pero no encuentro el código fuente que me sirva.
La verdad no entiendo el porque te sucede eso, porque si uno configura la página en el equipo de desarrollo esos margenes son los que toma, independiente de la configuración del pc en el cual se ejecute.
Respuesta

Les comparto el siguiente código en C#, funciona perfectamente la modificación de la margen en tiempo de ejecución, en mi caso requiero una impresión de un ticket pequeño, pero siempre me salia la margen predefinida en 20mm para todos los lados de la hoja, necesitaba pasarla a 5mm, y que el usuario o cliente no tuviese que ajustar cada vez que quisiera imprimir el ticket:

private void frmTicket_Load(object sender, EventArgs e)
{
try
{
this.spimprimir_ticketTableAdapter.Fill(this.dsPrincipal.spimprimir_ticket, Idregistro_entrada);
this.reportViewer1.RefreshReport();
PageSettings pg = new PageSettings();
pg.Margins.Left = 20;
pg.Margins.Right = 20;
pg.Margins.Top = 20;
pg.Margins.Bottom = 20;
this.reportViewer1.SetPageSettings(pg);

}
catch (Exception ex)
{
this.reportViewer1.RefreshReport();
PageSettings pg = new PageSettings();
pg.Margins.Left = 20;
pg.Margins.Right = 20;
pg.Margins.Top = 20;
pg.Margins.Bottom = 20;
this.reportViewer1.SetPageSettings(pg);
}

}

El resultado en las opciones de configuración de margenes es de 5.08mm que se ajusta perfecto a lo que requiero.

hay que utilizar la libreria: using System.Drawing.Printing;

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas