Fishborne 发表于 2020-4-27 18:54:35

ar14 如何绑定多数据源或者多数据集

本帖最后由 Lenka.Guo 于 2020-4-28 10:16 编辑

ar14 如何绑定多数据源或者多数据集?
尤其Startup里应如何对应呢?
如果返回C# Dataset, 包含多个Datatable表, 如何与报表的数据集一一对应
按下图的方式报错,


Lenka.Guo 发表于 2020-4-27 18:54:36

您好
如上午沟通,问题重现,了解实现需求返回多个 DataTable的。所以建议走以下代码:      app.UseReporting(settings =>
            {
                settings.UseFileStore(new DirectoryInfo(@"D:\Demo"));
                settings.LocateDataSource = args =>
               {

                     DataSet customerOrders = new DataSet("DataSource1");         

                     DataTable dt = new DataTable("Test");
                     dt.Columns.Add("Field1");

                     dt.Columns.Add("Field2");



                     dt.Rows.Add("1", "苹果");

                     dt.Rows.Add("2", "葡萄");
                     dt.Rows.Add("3", "葡萄11");

                     DataTable dt2 = new DataTable("Test2");
                     dt2.Columns.Add("Field1");

                     dt2.Columns.Add("Field2");
                     dt2.Rows.Add("01", "苹果");

                     dt2.Rows.Add("02", "葡萄");
                     dt2.Rows.Add("03", "葡萄11");
                     customerOrders.Tables.Add(dt);
                     customerOrders.Tables.Add(dt2);


                     if (args.DataSet.Name == "DataSet1")
                         return customerOrders.Tables;



                     if (args.DataSet.Name == "DataSet2")
                         return customerOrders.Tables;


                     return customerOrders.Tables;


               };
                settings.UseCompression = true;
            });

Lenka.Guo 发表于 2020-4-28 09:52:15

根据您描述的意思:
在LocateDataSource 方法中要返回的是一个DataSet 而不是 DataTable。 是吗?
如果返回的是 DataSet,您在代码中不需要做任何设置,要返回包含数据的 rptDS;
然后 再 报表设计器中,添加对应字段后, 在’查询‘ 选项卡中输入 DataTable的名称,直接点击确定即可。





Fishborne 发表于 2020-4-28 11:19:11


Fishborne 发表于 2020-4-28 11:19:52

Fishborne 发表于 2020-4-28 11:20:38

Fishborne 发表于 2020-4-28 11:27:30

1. Startup 里返回的 Dataset 中的每一个表是否要命名?
如: DataSet ds = bll.inqTestSubDs(reportPara, reportPara, reportPara);
                              ds.Tables.TableName = "rptMain";
                              ds.Tables.TableName = "rptSub";
2.报表--数据集--》查询--》 写查询语句还是写表名?
无论怎么写都会提示报错, 而且最后报表还是报错

Fishborne 发表于 2020-4-28 11:40:41

Lenka.Guo 发表于 2020-4-28 13:46:05

我这边制作一个示例给您发过去吧,制作示例需要2-4小时,制作完成后给您发送。请您耐心等待下。

Lenka.Guo 发表于 2020-4-28 18:01:40

您好
按照以下步骤:

1. 在 Startup.cs 中实现以下代码:
app.UseReporting(settings =>
            {
                settings.UseFileStore(new DirectoryInfo(@"D:\Demo"));
                settings.LocateDataSource = args =>
               {

                     DataSet customerOrders = new DataSet("DataSource1");

                     DataTable dt = new DataTable("Test");

                     if (args.DataSet.Query.DataSourceName == "DataSource1")

                     {

                         if (args.DataSet.Name == "DataSet1")

                         {

                           dt.Columns.Add("Field1");

                           dt.Columns.Add("Field2");

                     

                           dt.Rows.Add("1", "苹果");

                           dt.Rows.Add("2", "葡萄");
                           dt.Rows.Add("3", "葡萄11");


                         }

                     }
                     customerOrders.Tables.Add(dt);
                     return customerOrders;

               };
                settings.UseCompression = true;
            });




2. 修改报表
设置数据源为 DataSet Provider




3. 添加数据集
字段中添加要返回的字段,注意名称要与 代码中的名称匹配:



4. 在数据集【查询】输入 DataTable名称,注意名称要与 Startup中的Table名称一致,否则会无法找到该Table.

点击确定,确定可能会报错,请忽略后,继续点击确定即可关闭窗口。保存报表。






示例如附件,因为论坛 Demo限制,我删除了 Packges和dll文件,所以您可能无法直接运行。需要还原Nuget包



页: [1] 2
查看完整版本: ar14 如何绑定多数据源或者多数据集