ReportViewer управляет индикатором загрузки? - PullRequest
6 голосов
/ 28 мая 2009

Можно ли изменить изображение (зеленая вращающаяся вещь) элемента управления ReportViewer?

В данный момент я скрываю это и перекрываю индикатор выполнения (это WinForms, а не элемент управления ASP) ... Кажется, немного затянуто?

Спасибо :)

Ответы [ 5 ]

13 голосов
/ 04 июня 2009

Ну, ты дал мне вызов с этим, мой друг. Но я разобрался, как это сделать. Вот код, который я использовал для этого:

 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

Вызовите эту функцию во время события загрузки формы, и она перенастроит загрузочное изображение на любое указанное вами значение (передайте функцию элемент управления ReportViewer). Функция вызывается рекурсивно, пока изображение не будет найдено. В элементе управления ReportViewer есть только одна картинка, поэтому вам не нужно беспокоиться о ее поиске.

8 голосов
/ 04 июня 2009

Еще раз спасибо Джону за оригинальный код VB.NET ... Вот его ответ на 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 голосов
/ 18 апреля 2011

Для тех, кто недоволен, что это для WinForms, а не ASP.NET, это то же самое решение для веб:

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 голосов
/ 25 июня 2012

Большое спасибо за то, что поделились этим вопросом. Просто преобразуйте приведенный выше код vb.net в c # .net и измените цвет фона изображения.

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);
        }
    }
}
0 голосов
/ 06 ноября 2018

Спасибо за пример кода для замены элемента управления изображением в AsyncWait. Это работало абсолютно нормально, пока я не обновил свой элемент управления средством просмотра отчетов до последней версии, то есть версии 15.0.0.0.

После обновления элемент управления в позиции "c.Controls [0] .Controls [0]", как в примере кода из @Pratik, больше не является элементом управления изображением. Следовательно, он выдает ошибку о том, что не может преобразовать LiteralControl в изображение.

Я попытался использовать приведенный выше код с некоторыми незначительными правками, как показано ниже:

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

Однако, это не сработало, как ожидалось.

Есть ли другой способ заменить новый буквенный элемент управления изображением gif?

...