2009-05-28 10 views
6

Est-il possible de changer l'image (le truc tournant vert) du contrôle ReportViewer?Indicateur de chargement du contrôle ReportViewer?

Au moment où je le cache et chevauchant une barre de progression (c'est WinForms pas le contrôle ASP) ... Semble un peu long sinueux?

Merci :)

+0

Vous détestez ça beaucoup hein? – jgallant

+0

Haha ouais! J'utilise des trucs DevExpress WinForm ... J'ai un thème noir avec cette chose verte (pixélisée) au milieu. –

Répondre

13

Eh bien, vous me donné un défi avec celui de mon ami. Mais j'ai compris comment faire ça. Voici le code que je l'habitude de retirer ceci:

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 

Appelez cette fonction lors de votre événement de charge de forme, et il reconfigurer l'image de chargement à tout ce que vous spécifiez (passer la fonction du contrôle ReportViewer). La fonction est appelée récursivement jusqu'à ce que l'image soit trouvée. Il n'y a qu'une seule zone d'image dans le contrôle ReportViewer, vous n'avez donc pas à vous soucier de trouver celle-ci.

+0

Brillant! J'ai bien travaillé. J'ai converti votre code en C# pour le projet c'est (pour l'inclure comme une réponse afin qu'il puisse être formaté) - mais merci! Je ne vois pas pourquoi ils n'ont jamais eu cela comme une option en premier lieu? –

+0

comment utiliser VOTRENEWWAGEHERE? il n'accepte pas le nom de fichier comme une chaîne ... –

+0

@Chalkey pourriez-vous ajouter du code C# à la réponse? – Mortalus

8

Merci encore à Jon pour le code VB.NET d'origine ... Voici sa réponse 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

Pour ceux bummed que ce soit pour WinForms et non ASP.NET, c'est la même solution pour le 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

Merci une tonne pour partager ce question.Just converti le code vb.net ci-dessus pour C# .net et a changé l'image couleur 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); 
     } 
    } 
} 
Questions connexes