找回密码
 立即注册

QQ登录

只需一步,快速开始

2293174034

初级会员

33

主题

81

帖子

218

积分

初级会员

积分
218

活字格认证微信认证勋章

2293174034
初级会员   /  发表于:2015-5-15 12:47  /   查看:5623  /  回复:6
下面的程序是处理单个数据源,如果多个数据源如何处理?

private void Form1_Load(object sender, EventArgs e)
    {
        GrapeCity.ActiveReports.PageReport report = new GrapeCity.ActiveReports.PageReport(new System.IO.FileInfo("ListPageReport.rdlx"));
        GrapeCity.ActiveReports.Document.PageDocument document = new GrapeCity.ActiveReports.Document.PageDocument(report);
        document.LocateDataSource += new GrapeCity.ActiveReports.LocateDataSourceEventHandler(document_LocateDataSource);
        viewer1.LoadDocument(document);
    }
    void document_LocateDataSource(object sender, GrapeCity.ActiveReports.LocateDataSourceEventArgs args)
    {
        if (args.DataSourceName == "ListDataSource" && args.DataSetName == "ListDataSet")
        {
            args.Data = GetData();
        }   
    }
    private List<roduct> GetData()
    {
        List<roduct> list = new List<roduct>();
        for (int i = 1; i <= 20; i++)
        {
            list.Add(new Product(){ID=i,Name="产品"+i.ToString(),Price =i * 10f,Stock=i * 20});
        }
        return list;
    }

6 个回复

倒序浏览
frank.zhang
社区贡献组   /  发表于:2015-5-15 13:24:00
沙发
您好,
RDL报表可以绑定多个数据源,每个数据源下可以绑定多个数据集。
通过DataSourceName 和DataSetName 来确定唯一的一个数据集。
回复 使用道具 举报
2293174034
初级会员   /  发表于:2015-5-15 15:39:00
板凳
void document_LocateDataSource(object sender, GrapeCity.ActiveReports.LocateDataSourceEventArgs args)
    {
        if (args.DataSourceName == "ListDataSource1" &amp;&amp; args.DataSetName == "ListDataSet1")
        {
            args.Data = GetData1();
        }   
       if (args.DataSourceName == "ListDataSource2" &amp;&amp; args.DataSetName == "ListDataSet2")
        {
            args.Data = GetData2();
        }
    }
    private List<roduct> GetData1()
    {
        List<roduct> list = new List<roduct>();
        for (int i = 1; i <= 20; i++)
        {
            list.Add(new Product(){ID=i,Name="产品"+i.ToString(),Price =i * 10f,Stock=i * 20});
        }
        return list;
    }
private List<Cum> GetData2()
    {
        List<Cum> list = new List<Cum>();
        for (int i = 1; i <= 20; i++)
        {
            list.Add(new Cum(){ID=i,Name="dd"+i.ToString(),Price =i * 10f,Stock=i * 20});
        }
        return list;
    }
回复 使用道具 举报
frank.zhang
社区贡献组   /  发表于:2015-5-15 15:48:00
地板

您好,
我看了一下,就是这个思路,目前能够正常运行吗?
回复 使用道具 举报
2293174034
初级会员   /  发表于:2015-5-15 16:09:00
5#
如下图的页面报表,
虽然可以定义两个数据源和数据集,
但在报表中引用字段时,只能引用同一数据集下的字段,
比如页面可以设置数据集,table也可设置数据集,
页面textbox设置=Fields!bmmc.Value,
是否可以Fields前加上数据集名称来区分该字段来自不同的数据集?
如下的形式
textbox1.value=dwxxDataSet.Fields!bmmc.Value,
textbox2.value=gzxxDataSet.Fields!grbm.Value,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
frank.zhang
社区贡献组   /  发表于:2015-5-15 16:16:00
6#
您好,
从您的截图中看到您使用的页面报表,支持多个数据源的报表是RDL报表。
页面报表和RDL的报表区别主要在于页面报表使用打印的应用场景。

使用的场景可以参考:
http://gcdn.gcpowertools.com.cn/showtopic-17065.html
回复 使用道具 举报
frank.zhang
社区贡献组   /  发表于:2015-5-26 12:02:00
7#
您好,
距离这个问题的最后回复已经过去了一段时间,不知道这个问题您是否已经解决?
如果没有解决,欢迎跟贴接续讨论,如果已经解决请对本次服务进行评分。我们会认真对待你提出的宝贵意见,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部