【问题标题】:ReportViewer control loading indicator?ReportViewer 控件加载指示器?
【发布时间】:2009-05-28 09:03:24
【问题描述】:

是否可以更改 ReportViewer 控件的图像(绿色旋转的东西)?

目前我正在隐藏它并重叠一个进度条(这是 WinForms 而不是 ASP 控件)...似乎有点啰嗦?

谢谢:)

【问题讨论】:

  • 哈哈是的!我正在使用 DevExpress WinForm 的东西......有一个光滑的黑色主题,中间有这个愚蠢的(像素化)绿色。

标签: .net reportviewer


【解决方案1】:

好吧,我的朋友,你给了我一个挑战。但我想出了如何做到这一点。这是我用来完成此操作的代码:

 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 控件中只有一个图片框,因此您不必担心找到那个特定的图片框。

【讨论】:

  • 太棒了!工作得很好。我已将您的代码转换为 C# 用于此项目(我将其作为答案包含在内,以便对其进行格式化) - 但谢谢!我不明白为什么他们一开始就没有这个选项?
【解决方案2】:

再次感谢 Jon 提供原始 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);
    }
}

【讨论】:

    【解决方案3】:

    对于那些对这是针对 WinForms 而不是 ASP.NET 感到沮丧的人来说,这是针对 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
    

    【讨论】:

      【解决方案4】:

      非常感谢分享这个问题。刚刚将上面的 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);
              }
          }
      }
      

      【讨论】:

        【解决方案5】:

        感谢代码示例替换 AsyncWait 中的图像控件。在我将报表查看器控件升级到最新版本(即版本 15.0.0.0)之前,这一切正常。

        升级后,@Pratik 的代码示例中“c.Controls[0].Controls[0]”位置的控件不再是图像控件。因此,它会抛出一个错误,说无法将 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 图像替换新的文字控件吗?

        【讨论】:

          猜你喜欢
          • 2012-06-02
          • 1970-01-01
          • 2012-05-28
          • 1970-01-01
          • 1970-01-01
          • 2011-03-11
          • 1970-01-01
          • 2010-09-25
          • 1970-01-01
          相关资源
          最近更新 更多