KearneyKang 发表于 2019-4-26 14:34:00

Web端报表设计器如何绑定动态数据源

本帖最后由 KearneyKang 于 2020-4-8 16:26 编辑

Web端报表设计器给大家提供了一个网页端在线编辑的功能,除此之外Web报表设计器可以直接进行数据库的链接也可以进行动态数据源绑定,前面就如何直接连接数据库进行了一个讲解,现在主要讲解,如何进行动态数据源的绑定。
操作步骤如下:
1、 首先使用VS打开我们的Web端报表设计器。Web端报表设计器的存储路径如下:      
2、 在控制层DataSetsController 里进行一个数据源名称和数据集字段的设置,说的简单点就是创建表结构,表的命名,表对应的字段名称。实现代码:    public ActionResult GetDataSetContent(string id)

      {

         

            DataSet data1= returndata();



            ArData XmlJsonData = new ArData();

            XmlJsonData.DataSet = new ArDataSet();

            XmlJsonData.DataSet.Name = "DataSet1";

            XmlJsonData.DataSet.Query = new ArQuery();

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

            XmlJsonData.DataSet.Fields = new ArField.Columns.Count];

            foreach (DataColumn drc in data1.Tables.Columns)

            {

                XmlJsonData.DataSet.Fields = new ArField(drc.ColumnName, drc.ColumnName, drc.Caption);

            }

            XmlJsonData.DataSource = new ArDataSource();

            XmlJsonData.DataSource.Name = "DataSource1";

            XmlJsonData.DataSource.ConnectionProperties = new ArConnectionProperties();

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

            string dataSet = JsonHelper.ObjTranJson(XmlJsonData);

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

      }

      public DataSet returndata()

      {

            DataTabledt = new DataTable();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

            DataSet temp = new DataSet();

            temp.Tables.Add(dt);

            return temp;                              

      }



      

      

      public ActionResult GetDataSetsList()

      {

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



            //var dataSetsList = dataSetsService.GetDataSetsList();

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

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

      }


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

            {

                config.UseFileStore(ResourcesRootDirectory);



                config.LocateDataSource = args =>

                {

                  DataSetsController TemCon = new DataSetsController();

                  DataSet data1 = TemCon.returndata();

                  return data1;

                };

            });


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

      
      



5、 运行截图:      
      

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

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

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

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

            ArData XmlJsonData = new ArData();
            XmlJsonData.DataSet = new ArDataSet();
            XmlJsonData.DataSet.Name = "DataSet1";
            XmlJsonData.DataSet.Query = new ArQuery();
            XmlJsonData.DataSet.Query.DataSourceName = "DataSource1";
            XmlJsonData.DataSet.Fields = new ArField.Columns.Count];
            foreach (DataColumn drc in data1.Tables.Columns)
            {
                XmlJsonData.DataSet.Fields = new ArField(drc.ColumnName, drc.ColumnName, drc.Caption);
            }
            XmlJsonData.DataSource = new ArDataSource();
            XmlJsonData.DataSource.Name = "DataSource1";
            XmlJsonData.DataSource.ConnectionProperties = new ArConnectionProperties();
            XmlJsonData.DataSource.ConnectionProperties.DataProvider = "DATASET";
            string dataSet = JsonHelper.ObjTranJson(XmlJsonData);
            return new ContentResult { Content = dataSet, ContentType = "application/json" };
      }9、这样一个多数据绑定就基本完成了




Bella.Yuan 发表于 2022-5-7 09:23:04

SylvestreLee 发表于 2022-5-7 09:18
https://gcdn.grapecity.com.cn/showtopic-146373-1-1.html   已经发好了

收到,咱们在新贴上进行交流哦~

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的类型

Huayu 发表于 2020-3-4 09:54:21

我想咨询一下,就是如何在.net core mvc项目中在后台提供多数据集呢?

KearneyKang 发表于 2020-3-5 09:21:32

.Net Core跟 .Net 平台的写法其实是一样的。你说的提供多数据集,是想在后台代码段绑定通过代码绑定多个数据源数据集,还是

SylvestreLee 发表于 2022-4-28 10:04:47

KearneyKang 发表于 2019-4-28 12:10
你具体想实现什么需求,是想给报表绑定XML的动态数据源还是。如果是想给报表绑定一个XML的动态数据源的话, ...

请问一下,我可以使用.Net 版的AR 实现报表设计+动态数据填充吗?
具体需求是:
1,通过代码给报表设计器预置数据源和数据集,以便实施人员配置现场的打印模板。
2,通过代码实现设计好的报表的动态数据填充。

James.Lv 发表于 2022-4-28 18:14:50

SylvestreLee 发表于 2022-4-28 10:04
请问一下,我可以使用.Net 版的AR 实现报表设计+动态数据填充吗?
具体需求是:
1,通过代码给报表设 ...

可以实现的,具体您可以单独在求助中心发个帖子,我给您相关的实现方法

SylvestreLee 发表于 2022-5-7 09:14:35

James.Lv 发表于 2022-4-28 18:14
可以实现的,具体您可以单独在求助中心发个帖子,我给您相关的实现方法

:lol 好的谢谢我去发

Bella.Yuan 发表于 2022-5-7 09:16:31

SylvestreLee 发表于 2022-5-7 09:14
好的谢谢我去发

{:5_108:}

SylvestreLee 发表于 2022-5-7 09:18:29

Bella.Yuan 发表于 2022-5-7 09:16


https://gcdn.grapecity.com.cn/showtopic-146373-1-1.html   已经发好了:lol
页: [1] 2
查看完整版本: Web端报表设计器如何绑定动态数据源