It turns out that when I go to print a report and show the print dialog and then close the report viewer, the main form stays behind all the windows that are open at that moment. I have to minimize all the windows to access the main form of the application.
I left my code when printing the report viewer:
string report = "DALISF.rdlc";
reportViewer1.LocalReport.ReportEmbeddedResource = report;
reportViewer1.LocalReport.ReportPath = Path.Combine(@"..\FORMATOS\", report);
ReportDataSource rds1 = new ReportDataSource("Familias", Agregar);
reportViewer1.LocalReport.DataSources.Clear();
reportViewer1.LocalReport.DataSources.Add(rds1);
///<summary>
/// Vista de impresión de la página
///</summary>
reportViewer1.SetDisplayMode(DisplayMode.PrintLayout);
// Esta linea que tenemos abajo sirve para rellenar toda la página en donde se muestra el informe
reportViewer1.Dock = DockStyle.Fill;
///<summary>
/// Todo el ancho de la página
///</summary>
reportViewer1.ZoomMode = ZoomMode.PageWidth;
//reportViewer1.PrintDialog();
// Añadimos los parámetros que van a tener los reportes en cuestión (tenemos que ponerle los mismos nombres que tienen en el informe)
mAnadirParametros("CodigoDesdeFamilia", DesdeCodigo);
mAnadirParametros("CodigoHastaFamilia", HastaCodigo);
mAnadirParametros("NombreDesdeFamilia", DesdeNombreFam);
mAnadirParametros("NombreHastaFamilia", HastaNombreFam);
mAnadirParametros("Infopie", "Para cualquier duda o consulta contacte con CTI Canarias. Tlf: 922 365 002 - [email protected]");
reportViewer1.LocalReport.SetParameters(reportv); //Añadimos los parámetros al reporte.
reportViewer1.RefreshReport(); // El informe se refresca cada vez que lo carga.
reportViewer1.Messages = myMessageClass;
reportViewer1.RenderingComplete += new RenderingCompleteEventHandler(RenderingCompleteEventHandler);
}
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
private void RenderingCompleteEventHandler(object sender, RenderingCompleteEventArgs e)
{
(sender as ReportViewer).PrintDialog();
}
The code where I command to show the form that contains the report viewer is the following:
private void eClick(object sender, EventArgs e)
{
// Creamos una instancia del formulario en el cúal tenemos el reportviewer
Form3 f3 = new Form3(DesdeCodigo,HastaCodigo,DesdeNombreFam,HastaNombreFam);
Form1 f1 = new Form1(); //Instanciamos el formulario 1.
try
{
if (sender is DataGridView ||
sender is Label)
{
//...
}
else
{
if ((sender as Control).Name == varGen.sNombreBotonCancelar)
{
//...
}
else
{
if (sender != varGen.oControlAnterior)
{
if (varGen.oControlAnterior != null)
{
mPeticiones(varGen.oControlAnterior, Keys.Tab);
if (varGen.bControlConErrores == true)
{
return;
}
}
}
}
}
switch ((sender as Control).Name)
{
//--------------------
case "btImprimir":
f3.Show(); //Mostramos el formulario.
f3.CargarReporte(false); //Cargamos el reporte para imprimirlo.
eClick(btCancelar, null); // cerramos el formulario como si le hayamos dado un click al botón cancelar.
break; //rompemos el bucle
//--------------------
case "btVistaPrevia":
f3.Show(); //Mostramos el formulario
f3.CargarReporte(true); //Cargamos el reporte de Vista Previa
eClick(btCancelar, null); // cerramos el formulario como si le hayamos dado un click al botón cancelar.
break; //rompemos el bucle
//---------------------
case "btCancelar":
Close(); //Cerramos el formulario
break; //rompemos el bucle
//---------------------
default: //por defecto no hacemos nada.
//...
break; //por defecto rompemos el bucle
}
}
catch (Exception ex)
{
ctiMetodos.mMensajeDeError(ex);
}
}
Thanks. Cheers
I already found the error in my code and consequently the problem because the form did not open directly for me and stayed behind other windows. When opening the form I did it with the .Show() method and therefore it let me go to the back window and be able to change the data that I had previously written.
Well, we change that method for the .ShowDialog() method , which opens a modal window, that is, it opens the form but does not let us change anything in the previous form and therefore when we close the form 3 the program behaves as we want and form 3 opens on the main screen we are on.