2009-05-28 38 views
6

¿Es posible cambiar la imagen (el elemento giratorio verde) del control ReportViewer?Indicador de carga de control ReportViewer?

Por el momento lo estoy escondiendo y superponiendo una barra de progreso (esto es WinForms no el control ASP) ... Parece un poco largo aliento?

Gracias :)

+0

¿Lo odias tanto eh? – jgallant

+0

Jaja, sí! Estoy usando DevExpress WinForm cosas ... consiguió un tema negro pulido pasando con esta tontería verde (pixelada) en el medio. –

Respuesta

13

Bueno, me dieron un desafío con éste mi amigo. Pero descubrí cómo hacer esto. Aquí está el código que he usado para sacar esto adelante:

Private Sub CustomizeRV(ByVal ctrl As Control) 
    For Each c As Control In ctrl.Controls 

     If TypeOf c Is PictureBox Then 
     Dim pb As PictureBox = DirectCast(c, PictureBox) 
     pb.Image = YOURNEWIMAGEHERE 
     End If 

     If c.HasChildren Then 
     CustomizeRV(c) 
     End If 
    Next 
    End Sub 

llamar a esta función durante el evento de carga del formulario, y se volverá a configurar la imagen de carga a lo que se especifica (pasa a la función del control ReportViewer). La función se llama recursivamente hasta que se encuentre la caja de imágenes. Solo hay un cuadro de imagen en el control ReportViewer, por lo que no tiene que preocuparse por encontrar ese específico.

+0

¡Brillante! Funcionó muy bien. He convertido tu código a C# para el proyecto para el que esto es (lo incluiré como una respuesta para que pueda formatearse), ¡pero gracias! No veo por qué nunca tuvieron esto como una opción en primer lugar? –

+0

cómo usar YOURNEWIMAGEHERE? no acepta el nombre del archivo como una cadena ... –

+0

@Chalkey ¿podría agregarle código C# a la respuesta? – Mortalus

8

Gracias de nuevo a Jon para el código VB.NET originales ... Y la respuesta está en C# ...

private void CustomizeReportViewer(Control reportViewer) 
{ 
    foreach (Control c in reportViewer.Controls) 
    { 
     if (c.GetType() == typeof(PictureBox)) 
     { 
      (c as PictureBox).ImageLocation = "C:\\Loading.gif"; 
      return; 
     } 

     if (c.HasChildren) 
      CustomizeReportViewer(c); 
    } 
} 
6

Para aquellos disgustado con que esto es para Windows Forms y ASP.NET no, esto es la misma solución para la web:

Private Sub CustomizeRV(ByVal ctrl As Control) 
    For Each c As Control In ctrl.Controls 
     If String.Compare(c.ID, "AsyncWait")=0 Then 
      DirectCast(c.Controls(0).Controls(0), Image).ImageUrl = ResolveUrl("~/images/PleaseWait.gif") 
     End If 

     If c.HasControls Then CustomizeRV(c) 

    Next 

End Sub 
3

Muchísimas gracias por compartir esta question.Just convierte el código de vb.net arriba para C# .NET y cambió el color de la imagen backaground.

private void CustomizeRV(Control ReportViewCntr) 
{ 
    foreach (Control c in ReportViewCntr.Controls) 
     {    
      if ((string.Compare(c.ID, "AsyncWait") == 0)) 
      { 
      Image i = (Image)c.Controls[0].Controls[0]; 
      i.ImageUrl = ResolveUrl("~/Images/loading.gif"); 
      //i.BackColor = System.Drawing.Color.Gray; 
      i.BackColor = System.Drawing.ColorTranslator.FromHtml("#e6e6e6"); 
      } 
      if (c.HasControls()) 
      { 
      CustomizeRV(c); 
     } 
    } 
} 
Cuestiones relacionadas