Telerik报告显示动态创建的所有列的相同数据

本文关键字:数据 显示 动态 创建 Telerik 报告 | 更新日期: 2023-09-27 18:12:38

我使用Visual Studio创建了一个teleerik报表,并从DataTable中设置了数据源。我在运行时使用Telerik.Reporting.TableGroup动态创建列。现在我在这里遇到的问题是,报告显示了所有字段的相同数据,当我调试它时,它为不同的设置不同的字段。

我使用的代码如下:

private void Report4_NeedDataSource(object sender, EventArgs e)
{
  DataTable dt = new DataTable();
  dt = SalesReport.reportDataTable;
  table1.DataSource = dt;
  Telerik.Reporting.HtmlTextBox textboxGroup;
  Telerik.Reporting.HtmlTextBox textBoxTable;
  table1.ColumnGroups.Clear();
  table1.Body.Columns.Clear();
  table1.Body.Rows.Clear();
  int ColCount = dt.Columns.Count;
  for (int i = 0; i <= ColCount - 1; i++)
  {
    Telerik.Reporting.TableGroup tableGroupColumn = new Telerik.Reporting.TableGroup();
    table1.ColumnGroups.Add(tableGroupColumn);
    textboxGroup = new Telerik.Reporting.HtmlTextBox();
    textboxGroup.Style.BorderColor.Default = Color.Black;
    textboxGroup.Style.BorderStyle.Default = BorderType.Solid;
    textboxGroup.Value = dt.Columns[i].ColumnName;
    textboxGroup.Size = new SizeU(Unit.Inch(1.5), Unit.Inch(0.6));
    tableGroupColumn.ReportItem = textboxGroup;
    textBoxTable = new Telerik.Reporting.HtmlTextBox();
    textBoxTable.Value = "=Fields." + dt.Columns[i].ColumnName;
    textBoxTable.Size = new SizeU(Unit.Inch(1.1), Unit.Inch(0.3));
    table1.Body.SetCellContent(0, i, textBoxTable);
    table1.Items.AddRange(new ReportItemBase[] { textBoxTable, textboxGroup });
  }
}

Telerik报告显示动态创建的所有列的相同数据

我建议阅读下面的文章。我发现了同样的问题,我的解决方案是为组列、标签和详细信息文本框添加唯一的名称。

http://www.telerik.com/forums/incorrect-dynamic-table-columns

//Added
tableGroupColumn.Name = "group" + *something_uniquegoeshere*;
//Added
textboxGroup.Name = "label" +  *something_uniquegoeshere*;
//Added
textBoxTable.Name = "data" + *something_uniquegoeshere*;

遗憾的是,评论中没有足够的空间,但这是我的建议/建议。我不确定你的具体错误,但在过去我有问题时重用变量。您在for语句之外声明了变量,这可能就是导致问题的原因。

private void Report4_NeedDataSource(object sender, EventArgs e)
{
  DataTable dt = new DataTable();
  dt = SalesReport.reportDataTable;
  table1.DataSource = dt;
  //Telerik.Reporting.HtmlTextBox textboxGroup; 
  //Telerik.Reporting.HtmlTextBox textBoxTable; 
  table1.ColumnGroups.Clear();
  table1.Body.Columns.Clear();
  table1.Body.Rows.Clear();
  int ColCount = dt.Columns.Count;
  for (int i = 0; i <= ColCount - 1; i++)
  {
    Telerik.Reporting.TableGroup tableGroupColumn = new Telerik.Reporting.TableGroup();
    table1.ColumnGroups.Add(tableGroupColumn);
    var textboxGroup = new Telerik.Reporting.HtmlTextBox();
    textboxGroup.Style.BorderColor.Default = Color.Black;
    textboxGroup.Style.BorderStyle.Default = BorderType.Solid;
    textboxGroup.Value = dt.Columns[i].ColumnName;
    textboxGroup.Size = new SizeU(Unit.Inch(1.5), Unit.Inch(0.6));
    tableGroupColumn.ReportItem = textboxGroup;
    var textBoxTable = new Telerik.Reporting.HtmlTextBox();
    textBoxTable.Value = "=Fields." + dt.Columns[i].ColumnName;
    textBoxTable.Size = new SizeU(Unit.Inch(1.1), Unit.Inch(0.3));
    table1.Body.SetCellContent(0, i, textBoxTable);
    table1.Items.AddRange(new ReportItemBase[] { textBoxTable, textboxGroup });
  }
}