请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

KearneyKang
超级版主   /  发表于:2019-4-26 14:34  /   查看:1183  /  回复:4
本帖最后由 KearneyKang 于 2020-4-8 16:26 编辑

Web端报表设计器给大家提供了一个网页端在线编辑的功能,除此之外Web报表设计器可以直接进行数据库的链接也可以进行动态数据源绑定,前面就如何直接连接数据库进行了一个讲解,现在主要讲解,如何进行动态数据源的绑定。

操作步骤如下:

1、 首先使用VS打开我们的Web端报表设计器。
Web端报表设计器的存储路径如下:
      
2、 在控制层DataSetsController 里进行一个数据源名称和数据集字段的设置,说的简单点就是创建表结构,表的命名,表对应的字段名称。
实现代码:
   
  1. public ActionResult GetDataSetContent(string id)

  2.         {

  3.            

  4.             DataSet data1= returndata();



  5.             ArData XmlJsonData = new ArData();

  6.             XmlJsonData.DataSet = new ArDataSet();

  7.             XmlJsonData.DataSet.Name = "DataSet1";

  8.             XmlJsonData.DataSet.Query = new ArQuery();

  9.             XmlJsonData.DataSet.Query.DataSourceName = "DataSource1";

  10.             XmlJsonData.DataSet.Fields = new ArField[data1.Tables[0].Columns.Count];

  11.             foreach (DataColumn drc in data1.Tables[0].Columns)

  12.             {

  13.                 XmlJsonData.DataSet.Fields[drc.Ordinal] = new ArField(drc.ColumnName, drc.ColumnName, drc.Caption);

  14.             }

  15.             XmlJsonData.DataSource = new ArDataSource();

  16.             XmlJsonData.DataSource.Name = "DataSource1";

  17.             XmlJsonData.DataSource.ConnectionProperties = new ArConnectionProperties();

  18.             XmlJsonData.DataSource.ConnectionProperties.DataProvider = "DATASET";

  19.             string dataSet = JsonHelper.ObjTranJson(XmlJsonData);

  20.             return new ContentResult { Content = dataSet, ContentType = "application/json" };

  21.         }

  22.         public DataSet returndata()

  23.         {

  24.             DataTable  dt = new DataTable();

  25.             dt.Columns.Add("产品编号");

  26.             dt.Columns.Add("产品名称");

  27.             dt.Columns.Add("单价");

  28.             dt.Columns.Add("库存量");

  29.             dt.Columns.Add("产地");

  30.             dt.Rows.Add("A001", "苹果", 10, 300, "中国");

  31.             dt.Rows.Add("A002", "葡萄", 20, 200, "中国");

  32.             dt.Rows.Add("A003", "香蕉", 30, 400, "中国");

  33.             dt.Rows.Add("A004", "甘蔗", 10, 300, "中国");

  34.             dt.Rows.Add("A005", "荔枝", 20, 200, "中国");

  35.             dt.Rows.Add("A006", "芒果", 30, 400, "中国");

  36.             dt.Rows.Add("A007", "猕猴桃", 110, 300, "中国");

  37.             dt.Rows.Add("A008", "柠檬", 210, 200, "中国");

  38.             dt.Rows.Add("A009", "栗子", 320, 400, "中国");

  39.             dt.Rows.Add("A010", "火龙果", 100, 300, "中国");

  40.             dt.Rows.Add("A011", "青芒", 250, 200, "中国");

  41.             dt.Rows.Add("A012", "巴旦木", 320, 200, "中国");

  42.             dt.Rows.Add("A013", "土豆", 380, 400, "中国");

  43.             dt.Rows.Add("A014", "苹果", 110, 300, "中国");

  44.             dt.Rows.Add("A015", "葡萄", 420, 200, "中国");

  45.             dt.Rows.Add("A016", "香蕉", 530, 400, "中国");

  46.             dt.Rows.Add("A017", "土豆", 380, 400, "中国");

  47.             dt.Rows.Add("A018", "苹果", 110, 300, "中国");

  48.             dt.Rows.Add("A019", "葡萄", 420, 200, "中国");

  49.             dt.Rows.Add("A020", "香蕉", 530, 400, "中国");

  50.             dt.Rows.Add("A021", "苹果", 10, 300, "中国");

  51.             dt.Rows.Add("A022", "葡萄", 20, 200, "中国");

  52.             dt.Rows.Add("A023", "香蕉", 30, 400, "中国");

  53.             dt.Rows.Add("A024", "甘蔗", 10, 300, "中国");

  54.             dt.Rows.Add("A025", "荔枝", 20, 200, "中国");

  55.             dt.Rows.Add("A026", "芒果", 30, 400, "中国");

  56.             DataSet temp = new DataSet();

  57.             temp.Tables.Add(dt);

  58.             return temp;                              

  59.         }



  60.         [Route("list")]

  61.         [HttpGet]

  62.         public ActionResult GetDataSetsList()

  63.         {

  64.             var dataSetsService = HttpContext.GetServiceFromContext<IDataSetsService>();



  65.             //var dataSetsList = dataSetsService.GetDataSetsList();

  66.             //return Json(dataSetsList, JsonRequestBehavior.AllowGet);

  67.             return Json(new object[] { new { Id ="test", Name = "添加数据" } }, JsonRequestBehavior.AllowGet);

  68.         }

复制代码

3、 创建好的报表进行对应的数据绑定,数据绑定这块需要在这个Startup.cs里进行一个对应的动态数据源的绑定,不然就会出先报表预览的时候没有任何数据的情况,并且还会报错。
主要实现代码:
     
  1.        app.UseReporting(config =>

  2.             {

  3.                 config.UseFileStore(ResourcesRootDirectory);



  4.                 config.LocateDataSource = args =>

  5.                 {

  6.                     DataSetsController TemCon = new DataSetsController();

  7.                     DataSet data1 = TemCon.returndata();

  8.                     return data1;

  9.                 };

  10.             });

复制代码

4、 这样基本上一个动态数据源绑定就完成了,下面我们来看看具体的运行样式
            

      
      



5、 运行截图:
      
      

6、如果还想再web端报表设计器中添加多数据源和多数据集,你可以进行如下的操作  修改该方法,在里面添加多个数据集,如下
  1. public ActionResult GetDataSetsList()
  2.                 {
  3.                         var dataSetsService = HttpContext.GetServiceFromContext<IDataSetsService>();

  4.             return Json(new object[] { new { Id = "Test", Name = "添加数据" }, new { Id = "Test1", Name = "添加数据1" } }, JsonRequestBehavior.AllowGet);           
  5.         }
复制代码
7、运行的时候效果图如下:

8、选择一个对应的数据集进行添加,然后后端代码根据数据集命名进行判断,进行一个对应的数据源数据集的命名

  1. public ActionResult GetDataSetContent(string id)//根据不同的ID进行一个对应的判断。判断语句就自由发挥了
  2.                 {
  3.             DataSet data1 = returndata();

  4.             ArData XmlJsonData = new ArData();
  5.             XmlJsonData.DataSet = new ArDataSet();
  6.             XmlJsonData.DataSet.Name = "DataSet1";
  7.             XmlJsonData.DataSet.Query = new ArQuery();
  8.             XmlJsonData.DataSet.Query.DataSourceName = "DataSource1";
  9.             XmlJsonData.DataSet.Fields = new ArField[data1.Tables[0].Columns.Count];
  10.             foreach (DataColumn drc in data1.Tables[0].Columns)
  11.             {
  12.                 XmlJsonData.DataSet.Fields[drc.Ordinal] = new ArField(drc.ColumnName, drc.ColumnName, drc.Caption);
  13.             }
  14.             XmlJsonData.DataSource = new ArDataSource();
  15.             XmlJsonData.DataSource.Name = "DataSource1";
  16.             XmlJsonData.DataSource.ConnectionProperties = new ArConnectionProperties();
  17.             XmlJsonData.DataSource.ConnectionProperties.DataProvider = "DATASET";
  18.             string dataSet = JsonHelper.ObjTranJson(XmlJsonData);
  19.             return new ContentResult { Content = dataSet, ContentType = "application/json" };
  20.         }
复制代码
9、这样一个多数据绑定就基本完成了




本帖子中包含更多资源

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

x
请点击评分,对我的服务做出评价!5分为非常满意!

葡萄城技术服务团队
官方网站:https://www.grapecity.com.cn/

4 个回复

倒序浏览
fumasoft
高级会员   /  发表于:2019-4-27 10:40:12
沙发
请问XmlJsonData.DataSet.Query.CommandText和XmlJsonData.DataSource.ConnectionProperties.ConnectString需要赋值吗?对应的值是什么?
回复 使用道具 举报
KearneyKang
超级版主   /  发表于:2019-4-28 12:10:39
板凳
你具体想实现什么需求,是想给报表绑定XML的动态数据源还是。如果是想给报表绑定一个XML的动态数据源的话,后台直接进行一个XML数据的转换进行,转换为一个对应Datatable和Dataset或者object的类型
请点击评分,对我的服务做出评价!5分为非常满意!

葡萄城技术服务团队
官方网站:https://www.grapecity.com.cn/
回复 使用道具 举报
Huayu
注册会员   /  发表于:2020-3-4 09:54:21
地板
我想咨询一下,就是如何在.net core mvc项目中在后台提供多数据集呢?
回复 使用道具 举报
KearneyKang
超级版主   /  发表于:2020-3-5 09:21:32
5#
.Net Core跟 .Net 平台的写法其实是一样的。你说的提供多数据集,是想在后台代码段绑定通过代码绑定多个数据源数据集,还是
请点击评分,对我的服务做出评价!5分为非常满意!

葡萄城技术服务团队
官方网站:https://www.grapecity.com.cn/
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册