【问题标题】:Activereports PageReport creation by using custom data使用自定义数据创建 Activereports PageReport
【发布时间】:2015-06-04 02:42:52
【问题描述】:

我想根据我的自定义类创建一个页面报告,而我的 PageReport 里面包含一个表格。

比如说我有一个如下的客户数据类

Class CustomerData 
{
  string name;
  string id;
  string address;
}

然后我创建了一个List<CustomerData> CustomerList,其中包含我所有的客户数据。我想将此数据分配为我的 Pagereport 的数据源。我知道在 SectionReport 我们可以这样做。但是如何将我的信息列表分配给 PageReport。谁能帮帮我

最终我希望得到类似下面的输出

----------------------------------------------
|Name       |      ID        |     Address    |
----------------------------------------------
|Name1      |      ID1       |     Address1   |
----------------------------------------------
|Name2      |      ID2       |     Address2   |
----------------------------------------------
|Name3      |      ID3       |     Address3   |
----------------------------------------------

更新

ComponentIdInfo 是字段之一

【问题讨论】:

  • 你试过什么?也许提供SectionReport version 的工作示例。
  • 我的要求是简单地从数据列表创建页面报告。请检查问题。我更新了

标签: c# activereports


【解决方案1】:

做,像这样:

        this._rptPath = new FileInfo(@"..\..\PageReport1.rdlx");
        this._definition = new PageReport(this._rptPath);
        this._definition.ConfigurationProvider = new GrapeCity.ActiveReports.Configuration.DefaultConfigurationProvider();

        this._runtime = new PageDocument(this._definition);
        this._runtime.LocateDataSource += this.runtime_LocateDataSource;
        this.YourViewer.ReportViewer.LoadDocument(this._runtime);

并在您的runtime_LocateDataSource 事件上,添加以下代码:

private void runtime_LocateDataSource(object sender, LocateDataSourceEventArgs args)
    {
        object data = null;
        string dataSetName = args.DataSetName;
        string dataSourceName = args.DataSourceName;

        if (StringsAreEqual("DataSource1", dataSourceName))
        {
            if (StringsAreEqual("DataSet1", dataSetName))
            {
                data = CustomerListDataTable;
            }
        }

        args.Data = data;
    }

    private static bool StringsAreEqual(string str1, string str2)
    {
        return string.Compare(str1, str2, true, CultureInfo.InvariantCulture) == 0;
    }

请注意,您必须在页面报告中创建一个名为 DataSource1DataSource 和一个名为 DataSet1DataSet。并将DataSet1的列名匹配到Customer'spublic properties

要访问 Add DataSource ,请在您的 page report(灰色区域)外右击并选择 property 并在 property 窗口中查找 DataSource

如何添加数据源/数据集

  • 在报表资源管理器中,右键单击数据源节点并选择添加数据源选项。
  • 在出现的“报表数据源”对话框中,选择“常规”页面并在“名称”字段中输入名称,如 DataSource1。
  • 右键单击数据源节点并选择“添加数据集”选项。
  • 在出现的DataSet 对话框中,选择General 页面并输入数据集的名称为DataSet1。此名称显示为报表资源管理器中数据源图标的子节点。
  • 转到字段选项卡并在此处输入数据集的字段(列)

请注意,如果找不到Report Explorer,请转到Visual Studios View 菜单并转到Other Windows

【讨论】:

  • 我可以通过表格属性设置数据集。如何设置数据源?
  • @ANewGuyInTown,谢谢我从视图菜单中找到它。现在我的 runtime_LocateDataSource 没有被调用。这是为什么? (何时被调用)
  • 您是否尝试提供报告的完整路径? new FileInfo(@"FullPath/YourReportName.rdlx");
  • 你能发布你是如何enter 你的fields 用于数据集的吗? (截图)
  • 好的,尝试将list 转换为datatable 并设置data=datatable 看看会发生什么。
【解决方案2】:

您希望实现的内容可以使用 RDL/页面报告中的 Object DataProvider 来实现。请查看link 了解详细信息和代码示例。请注意“未绑定数据源”部分下的对象提供程序主题。

【讨论】:

    猜你喜欢
    • 2018-07-23
    • 2018-07-29
    • 1970-01-01
    • 2018-09-25
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多