找回密码
 立即注册

QQ登录

只需一步,快速开始

Fishborne
金牌服务用户   /  发表于:2020-4-27 18:54  /   查看:7948  /  回复:15
1金币
本帖最后由 Lenka.Guo 于 2020-4-28 10:16 编辑

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


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

最佳答案

查看完整内容

您好 如上午沟通,问题重现,了解实现需求返回多个 DataTable的。所以建议走以下代码:

15 个回复

倒序浏览
最佳答案
最佳答案
Lenka.Guo讲师达人认证 悬赏达人认证
超级版主   /  发表于:2020-4-27 18:54:36
来自 16#
您好
如上午沟通,问题重现,了解实现需求返回多个 DataTable的。所以建议走以下代码:
  1.         app.UseReporting(settings =>
  2.             {
  3.                 settings.UseFileStore(new DirectoryInfo(@"D:\Demo"));
  4.                 settings.LocateDataSource = args =>
  5.                  {

  6.                      DataSet customerOrders = new DataSet("DataSource1");           

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

  9.                      dt.Columns.Add("Field2");



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

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

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

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

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


  21.                      if (args.DataSet.Name == "DataSet1")
  22.                          return customerOrders.Tables[0];



  23.                      if (args.DataSet.Name == "DataSet2")
  24.                          return customerOrders.Tables[1];


  25.                      return customerOrders.Tables[1];


  26.                  };
  27.                 settings.UseCompression = true;
  28.             });
复制代码


回复 使用道具 举报
Lenka.Guo讲师达人认证 悬赏达人认证
超级版主   /  发表于:2020-4-28 09:52:15
2#
根据您描述的意思:
在LocateDataSource 方法中要返回的是一个  DataSet 而不是 DataTable。 是吗?
如果返回的是 DataSet,您在代码中不需要做任何设置,要返回包含数据的 rptDS;
然后 再 报表设计器中,添加对应字段后, 在’查询‘ 选项卡中输入 DataTable的名称,直接点击确定即可。





本帖子中包含更多资源

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

x
回复 使用道具 举报
Fishborne
金牌服务用户   /  发表于:2020-4-28 11:19:11
3#

本帖子中包含更多资源

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

x
回复 使用道具 举报
Fishborne
金牌服务用户   /  发表于:2020-4-28 11:19:52
4#

本帖子中包含更多资源

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

x
回复 使用道具 举报
Fishborne
金牌服务用户   /  发表于:2020-4-28 11:20:38
5#

本帖子中包含更多资源

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

x
回复 使用道具 举报
Fishborne
金牌服务用户   /  发表于:2020-4-28 11:27:30
6#
1. Startup 里返回的 Dataset 中的每一个表是否要命名?
如: DataSet ds = bll.inqTestSubDs(reportPara[3], reportPara[1], reportPara[2]);
                                ds.Tables[0].TableName = "rptMain";
                                ds.Tables[1].TableName = "rptSub";
2.  报表--数据集--》查询--》 写查询语句还是写表名?
无论怎么写都会提示报错, 而且最后报表还是报错
回复 使用道具 举报
Fishborne
金牌服务用户   /  发表于:2020-4-28 11:40:41
7#

本帖子中包含更多资源

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

x
回复 使用道具 举报
Lenka.Guo讲师达人认证 悬赏达人认证
超级版主   /  发表于:2020-4-28 13:46:05
8#
我这边制作一个示例给您发过去吧,制作示例需要2-4小时,制作完成后给您发送。请您耐心等待下。
回复 使用道具 举报
Lenka.Guo讲师达人认证 悬赏达人认证
超级版主   /  发表于:2020-4-28 18:01:40
9#
您好
按照以下步骤:

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

  6.                      DataSet customerOrders = new DataSet("DataSource1");

  7.                      DataTable dt = new DataTable("Test");

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

  9.                      {

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

  11.                          {

  12.                              dt.Columns.Add("Field1");

  13.                              dt.Columns.Add("Field2");

  14.                        

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

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


  18.                          }

  19.                      }
  20.                      customerOrders.Tables.Add(dt);
  21.                      return customerOrders;

  22.                  };
  23.                 settings.UseCompression = true;
  24.             });
复制代码




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




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



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

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






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



本帖子中包含更多资源

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

x
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部