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

时间:2014-07-11 08:19:18

标签: c# telerik telerik-reporting

我使用Visual Studio创建了一个telerik报告,并从DataTable中设置了Datasource。我正在使用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 });

  }

}

2 个答案:

答案 0 :(得分:3)

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

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*;

答案 1 :(得分:2)

遗憾的是,评论中没有足够的空间,但这是我的建议/建议。我不确定您的具体错误,但过去我在重新使用变量时遇到了问题。您在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 });
  }

}