2009-05-28 17 views
6

Czy można zmienić obraz (zielony obiekt wirujący) kontrolki ReportViewer?Wskaźnik ładowania kontrolki ReportViewer?

W tej chwili ukrywam to i nakładam się na pasek postępu (to jest WinForms, a nie kontrola ASP) ... Wydaje się nieco zdyszany?

Dzięki :)

+0

Nienawidzisz tego tak bardzo? – jgallant

+0

Haha tak! Używam rzeczy DevFexpress WinForm ... mam gładki czarny motyw z tym głupim (piksele) zielonym środkiem w środku. –

Odpowiedz

13

Cóż, dałeś mi wyzwanie z tego przyjacielu. Ale domyśliłem się, jak to zrobić. Oto kod, który kiedyś ciągnąć ten off:

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 

wywołać tę funkcję podczas zdarzenia obciążenia forma i będzie ponownie skonfigurować obraz do ładowania, co można określić (zdać funkcja kontroli ReportViewer). Funkcja jest wywoływana rekurencyjnie do momentu znalezienia skrzynki obrazowania. W kontrolce ReportViewer znajduje się tylko jedno pole graficzne, więc nie musisz się martwić o znalezienie tego konkretnego.

+0

Genialny! Pracował świetnie. Przekształciłem twój kod na C# dla projektu, do którego to służy (nieobejmuję go jako odpowiedź, aby można go było sformatować) - ale dzięki! Nie rozumiem, dlaczego nigdy nie mieli tego jako opcji? –

+0

jak korzystać z YOURNEWIMAGEHERE? nie przyjmuje nazwy pliku jako ciągu znaków ... –

+0

@Chalkey czy mógłbyś dodać kod C# do odpowiedzi? – Mortalus

8
znowu

Dzięki Jon do oryginalnego kodu VB.NET ... Oto jego odpowiedź w 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

Dla tych, nieprzyjemny, że jest to dla WinForms i ASP.NET nie jest to samo rozwiązanie dla sieci:

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

Dzięki ton za udostępnienie tego question.Just przekształcone powyższy kod vb.net do C# .NET i zmienił kolor obrazu 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); 
     } 
    } 
} 
Powiązane problemy