【问题标题】:Telerik Reporting: Adding Textbox at Runtime Does Not Show UpTelerik 报告:在运行时添加文本框不显示
【发布时间】:2014-04-07 21:23:29
【问题描述】:

我目前正在使用 Telerik Reporting(2013 年第一季度发布)编写报告,我正在尝试在运行时将文本框添加到标题(最终也是详细信息部分),但问题是文本框添加的内容不显示。我不确定它为什么不显示,但添加后没有出现错误。现在我正在尝试在 itemdatabinding 事件期间添加它。我的代码如下:

public partial class _WellPlateReport : Telerik.Reporting.Report
{
  public _WellPlateReport(Dictionary<string, object> ReportParameters)
  {
    //
    // Required for telerik Reporting designer support
    //
    InitializeComponent();
    tbGenotype.Visible = false;
    //
    // TODO: Add any constructor code after InitializeComponent call
    //
  }

  private void labelsGroupHeaderSection_ItemDataBinding(object sender, EventArgs e)
  {
    string temp = "";

    Telerik.Reporting.Processing.GroupSection headerGroup = (Telerik.Reporting.Processing.GroupSection)sender;

    Telerik.Reporting.TextBox tb = new Telerik.Reporting.TextBox();
    tb.Left = new Telerik.Reporting.Drawing.Unit(0.5, UnitType.Inch) + tbGenotype.Left +   tbGenotype.Width;
    //tb.Width = new Telerik.Reporting.Drawing.Unit(3.0, UnitType.Inch);
    tb.Size = tbSex.Size;
    tb.Name = "TestLabel1";
    tb.Value = "Test Label";
    tb.Location = new Telerik.Reporting.Drawing.PointU(tbGenotype.Left + tbGenotype.Width + new Telerik.Reporting.Drawing.Unit(0.5, UnitType.Inch), Telerik.Reporting.Drawing.Unit.Inch(0D));

    //this.labelsGroupHeaderSection.Items.Add(tb);
    //this.Items.AddRange(new Telerik.Reporting.ReportItemBase[] { tb });

    this.labelsGroupHeaderSection.Items.AddRange(new Telerik.Reporting.ReportItemBase[] { tb });
  }
}

tbGenotype 是另一个文本框,新文本框将在运行时添加到旁边,所以我使用它的定位来放置动态文本框。需要添加未知数量的附加列,但我不确定为什么这不起作用。我的搜索显示其他人以类似的方式添加控件。

更新:另请注意,文本框 tbGenotype 已添加到 Visual Studio 的设计器中。尝试在其上设置可见属性,但将文本框添加到标题中不起作用。

【问题讨论】:

    标签: c# asp.net-mvc-4 dynamic runtime telerik-reporting


    【解决方案1】:

    尝试查看this documentation。我注意到的唯一区别是他们将文本框添加到面板中。然后他们将面板添加到报告中。检查是否在面板中添加了 tbGenotype,但我认为您放入报告中的每个元素都必须首先在同一个面板中。

    【讨论】:

    • 我从您的链接中检查了那里的文档,我基本上也在做同样的事情。我添加了名称属性并更改了大小和位置,我可以看到文本框已添加到项目集合中,但该控件在标签标题部分的报表中的任何位置均不可见。
    • 更新:我将 Telerik 报告 DLL 更新到 2014 年第一季度,并且存在同样的问题。控件已添加,但不可见且未呈现。
    • 尝试添加文本框,然后将模板保存到文件中。然后用设计器打开,看看文本框有没有。
    • Pepo,我不太确定您将模板保存到文件是什么意思。所有这些报告都是在 Visual Studio 内创建的,而不是使用 Telerik 的报告编辑器(使用 Visual Studio 内的编辑器)。
    • 这就是我的意思ReportXmlSerializer Class
    【解决方案2】:

    我有同样的问题,但我注意到当我使用报表查看器中的刷新按钮刷新报表时(在我的 Windows 应用程序中;对于 Web 版本应该相同),动态添加的控件会显示出来。当我第二次刷新时,会出现一组额外的(第二个)控件。

    我的观察是这样的:在初始运行时,控件被添加,但不可见(不管可见属性值是否为真)。在第一次刷新(第二个服务器/应用程序运行)时,添加了第二组控件,不可见,而第一组现在可见。在第二次刷新/第三次运行时,添加了第三组不可见控件,并显示了前 2 组控件。

    首先,我需要在再次添加之前清除所有动态添加的项目的父面板。但是,就问题而言,调用 ReportViewerInstance.RefreshReport() 应该会导致动态添加的控件在报表的初始呈现之前变得可见。我即将尝试这种情况。我还不确定如何调用报表查看器的实例,但至少我应该能够将实例的引用作为报表参数或类似参数传递。

    this Telerik help post 中找到RefreshReport() 调用:

    在尝试上述方法后,我将更新我的结果。

    更新:RefreshReport 对我不起作用 - 它取消了处理并导致没有报告。但是,我确实解决了我的问题。而且,它也应该解决 OP 的问题。

    Eric 的代码显示尝试在 ItemDataBinding 事件中创建和显示动态添加的控件。我也在做同样的事情,还尝试了 ItemDataBound。这两个事件都在处理过程中发生,关于动态添加的表格控件的帮助主题向我提示。 Telerik 专家建议在处理过程中不要更改报告项目以避免不可预知的行为。之后,在实例化所有需要的数据对象之后,在将报表数据源设置为一个之前,我将创建控件的代码移动到一个方法(不是事件)中,并从我的 Report.NeedDataSource 事件中调用它我的对象集合。这很好用!

    我希望这对其他人有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-04
      相关资源
      最近更新 更多