我目前正在使用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中的设计器中。尝试在其上设置可见属性,但是将文本框添加到标题中则不行。
答案 0 :(得分:0)
尝试查看this documentation。我注意到的唯一区别是他们正在将文本框添加到面板中。然后他们在报告中添加了面板。检查是否在面板中添加了tbGenotype,但我认为您在报告中放入的每个元素都必须首先位于同一个面板中。
答案 1 :(得分:0)
我遇到了同样的问题,但是当我使用报表查看器中的刷新按钮刷新报表时(在我的Windows应用程序中;对于Web版本应该是相同的),会显示动态添加的控件。当我第二次刷新时,会显示另外一组(第二组)控件。
我的观察是这样的:在初始运行时,控件被添加但不可见(无论可见属性值是否为真)。在第一次刷新(第二次服务器/应用程序运行)时,添加第二组控件,不可见,第一组现在可见。在第二次刷新/第三次运行时,添加了第三组不可见的控件,并显示了前两组控件。
首先,在重新添加之前,我需要清除所有动态添加项目的父面板。但是,就问题而言,调用 ReportViewerInstance .RefreshReport()会导致动态添加的控件在初始呈现报表之前变得可见。我即将尝试这种情况。我不确定我将如何调用报表查看器的实例,但至少,我应该能够将实例的引用作为报表参数传递,或者类似。
在this Telerik help post中找到的RefreshReport()调用:
在尝试上述内容后,我会更新我的结果。
更新:RefreshReport对我不起作用 - 它取消了处理并导致没有报告。但是,我确实解决了我的问题。而且,它也应该解决OP的问题。
Eric的代码显示了尝试在ItemDataBinding事件中创建和显示动态添加的控件。我也在做同样的事情,并尝试了ItemDataBound。这两个事件都发生在处理过程中,并且有关动态添加的表控件的帮助主题让我失望。 Telerik专家建议在处理过程中不要更改报告项,以避免不可预测的行为。接下来,我移动了我的代码,在方法(而不是事件)中创建控件,并在实例化所有需要的数据对象之后,在将报表数据源设置为一个之前,从我的 Report .NeedDataSource事件中调用它我的对象集合。这很棒!
我希望这有助于其他人!