本帖最后由 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[data1.Tables[0].Columns.Count];
- foreach (DataColumn drc in data1.Tables[0].Columns)
- {
- XmlJsonData.DataSet.Fields[drc.Ordinal] = 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()
- {
- DataTable dt = 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;
- }
-
- [Route("list")]
- [HttpGet]
- 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[data1.Tables[0].Columns.Count];
- foreach (DataColumn drc in data1.Tables[0].Columns)
- {
- XmlJsonData.DataSet.Fields[drc.Ordinal] = 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、这样一个多数据绑定就基本完成了
|