Telerik报告:在运行时添加文本框不会显示

时间:2014-04-07 21:23:30

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

我目前正在使用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中的设计器中。尝试在其上设置可见属性,但是将文本框添加到标题中则不行。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

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

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

在尝试上述内容后,我会更新我的结果。

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

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

我希望这有助于其他人!