使用 JSON 数组创建 RDLC 报告

Creating RDLC report with JSON array

我正在尝试为我的项目创建带有 JSON 数组的 RDLC 报告。此 JSON 数组来自 API。我已经使用数据库制作了 RDLC 报告,因为 Dataset 直接访问 SQL database,但是如何处理来自 JSON 数组的 API。

我试图在非类型化数据表上获取 JSON 数组,然后将其合并到类型化数据表中。然后应该显示在 dataset.xsd 上,但它不是。

public partial class WebForm2 : System.Web.UI.Page
{
    [WebMethod]
    [System.Web.Script.Services.ScriptMethod()]
    protected void Page_Load(object sender, EventArgs e)
    {
        test();
    }

    public void test()
    {
        WebClient client = new WebClient();
        string strJSON = client.DownloadString("Json.txt");
        string chk = strJSON.Replace("\", "");
        chk = chk.Substring(1, chk.Length - 2);
        DataTable dtUsingMethod = GetJSONToDataTableUsingNewtonSoftDll(chk);
        DataSet1.test_tableDataTable tbl = new DataSet1.test_tableDataTable();
        tbl.Merge(dtUsingMethod);
    }

    public static DataTable GetJSONToDataTableUsingNewtonSoftDll(string JSONData)
    {
        DataTable dt = (DataTable)JsonConvert.DeserializeObject(JSONData, (typeof(DataTable)));
        return dt;
    }
}

JSON格式如下:

"[{\"plant_sl_no\":\"3451\",\"batch_no\":\"3515\",\"batch_no_sl\":\"0\",\"batch_index\":\"6\",\"batch_date\":\"5\/29\/2019 3:00:00 AM\",\"recp_id\":\"M-30(COLUME)\",\"recp_name\":\"M30\",\"pdt_qty\":\"0.50\",\"truck_id\":\"KA 01 C 9771\",\"cust_id\":\"1\",\"load_sent_qty\":\"15.00\",\"site\":\"PHRE HEATER\",\"Prod1_Agg_Name\":\"10MM\",\"Prod1_Agg_Stwt\":\"260.00\",\"Prod1_Agg_Atwt\":\"270.00\",\"Prod1_Agg_Moi\":\"0.00\",\"Prod2_Agg_Name\":\"R SAND\",\"Prod2_Agg_Stwt\":\"395.00\",\"Prod2_Agg_Atwt\":\"410.00\",\"Prod2_Agg_Moi\":\"0.00\",\"Prod3_Agg_Name\":\"20 MM\",\"Prod3_Agg_Stwt\":\"300.00\",\"Prod3_Agg_Atwt\":\"300.00\",\"Prod3_Agg_Moi\":\"0.00\",\"Prod4_Agg_Name\":\"M SAND\",\"Prod4_Agg_Stwt\":\"0.00\",\"Prod4_Agg_Atwt\":\"0.00\",\"Prod4_Agg_Moi\":\"0.00\",\"Prod5_Agg_Name\":\"0\",\"Prod5_Agg_Stwt\":\"0.00\",\"Prod5_Agg_Atwt\":\"0.00\",\"Prod5_Agg_Moi\":\"0.00\",\"Prod6_Agg_Name\":\"-\",\"Prod6_Agg_Stwt\":\"0.00\",\"Prod6_Agg_Atwt\":\"0.00\",\"Prod6_Agg_Moi\":\"0.00\"},{\"plant_sl_no\":\"3451\",\"batch_no\":\"3515\",\"batch_no_sl\":\"0\",\"batch_index\":\"1\",\"batch_date\":\"5\/29\/2019 3:00:00 AM\",\"recp_id\":\"M-30(COLUME)\",\"recp_name\":\"M30\",\"pdt_qty\":\"0.50\",\"truck_id\":\"KA 01 C 9771\",\"cust_id\":\"1\",\"load_sent_qty\":\"15.00\",\"site\":\"PHRE HEATER\",\"Prod1_Agg_Name\":\"10MM\",\"Prod1_Agg_Stwt\":\"260.00\",\"Prod1_Agg_Atwt\":\"260.00\",\"Prod1_Agg_Moi\":\"0.00\",\"Prod2_Agg_Name\":\"R SAND\",\"Prod2_Agg_Stwt\":\"395.00\",\"Prod2_Agg_Atwt\":\"395.00\",\"Prod2_Agg_Moi\":\"0.00\",\"Prod3_Agg_Name\":\"20 MM\",\"Prod3_Agg_Stwt\":\"300.00\",\"Prod3_Agg_Atwt\":\"300.00\",\"Prod3_Agg_Moi\":\"0.00\",\"Prod4_Agg_Name\":\"M SAND\",\"Prod4_Agg_Stwt\":\"0.00\",\"Prod4_Agg_Atwt\":\"0.00\",\"Prod4_Agg_Moi\":\"0.00\",\"Prod5_Agg_Name\":\"0\",\"Prod5_Agg_Stwt\":\"0.00\",\"Prod5_Agg_Atwt\":\"0.00\",\"Prod5_Agg_Moi\":\"0.00\",\"Prod6_Agg_Name\":\"-\",\"Prod6_Agg_Stwt\":\"0.00\",\"Prod6_Agg_Atwt\":\"0.00\",\"Prod6_Agg_Moi\":\"0.00\"},{\"plant_sl_no\":\"3451\",\"batch_no\":\"3515\",\"batch_no_sl\":\"0\",\"batch_index\":\"2\",\"batch_date\":\"5\/29\/2019 3:00:00 AM\",\"recp_id\":\"M-30(COLUME)\",\"recp_name\":\"M30\",\"pdt_qty\":\"0.50\",\"truck_id\":\"KA 01 C 9771\",\"cust_id\":\"1\",\"load_sent_qty\":\"15.00\",\"site\":\"PHRE HEATER\",\"Prod1_Agg_Name\":\"10MM\",\"Prod1_Agg_Stwt\":\"260.00\",\"Prod1_Agg_Atwt\":\"260.00\",\"Prod1_Agg_Moi\":\"0.00\",\"Prod2_Agg_Name\":\"R SAND\",\"Prod2_Agg_Stwt\":\"395.00\",\"Prod2_Agg_Atwt\":\"395.00\",\"Prod2_Agg_Moi\":\"0.00\",\"Prod3_Agg_Name\":\"20 MM\",\"Prod3_Agg_Stwt\":\"300.00\",\"Prod3_Agg_Atwt\":\"300.00\",\"Prod3_Agg_Moi\":\"0.00\",\"Prod4_Agg_Name\":\"M SAND\",\"Prod4_Agg_Stwt\":\"0.00\",\"Prod4_Agg_Atwt\":\"0.00\",\"Prod4_Agg_Moi\":\"0.00\",\"Prod5_Agg_Name\":\"0\",\"Prod5_Agg_Stwt\":\"0.00\",\"Prod5_Agg_Atwt\":\"0.00\",\"Prod5_Agg_Moi\":\"0.00\",\"Prod6_Agg_Name\":\"-\",\"Prod6_Agg_Stwt\":\"0.00\",\"Prod6_Agg_Atwt\":\"0.00\",\"Prod6_Agg_Moi\":\"0.00\"}]"

预期结果是我想使用 JSON 数组生成报告。

好的,我找到了适合我的答案。我将其张贴在这里,希望对其他人也有帮助。 这里的问题是我们需要 RDLC 报告的数据源。由于我们无法使用 Sql 数据库,因此我们必须创建自己的自定义数据源。

第 1 步。添加一个 class 文件。

第 2 步。class 文件中的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;
using System.Text;
using System.Runtime.Serialization.Formatters;
using System.IO;
using System.Data;
using System.Xml.Serialization;
using System.Runtime.Serialization;
using Newtonsoft.Json.Serialization;
using System.Web.Services;
using System.Net;

namespace Batch_report
{
    public class batch_data 
    {
        public string plant_sl_no { get; set; }
        public string batch_no { get; set; }
        public string batch_no_sl { get; set; }
        public string batch_index { get; set; }
        public string batch_date { get; set; }
        public string recp_id { get; set; }
        public string recp_name { get; set; }
        public string pdt_qty { get; set; }
        public string truck_id { get; set; }
        public string cust_id { get; set; }
        public string load_sent_qty { get; set; }
        public string site { get; set; }
    }
    public class Custom_batch
    {
        [WebMethod]
        [System.Web.Script.Services.ScriptMethod()]
        public static List<batch_data> GetEmployeeName()
        {
            //List<string> abc = new List<string>();
            //string[] arr;
            WebClient client = new WebClient();
            string info = client.DownloadString("http://json.txt");
            string chk = info.Replace("\", "");
            chk = chk.Substring(1, chk.Length - 2);

            List<batch_data> obj = new List<batch_data>();
            obj = JsonConvert.DeserializeObject<List<batch_data>>(chk);

            return obj;
        }
    }
}

第 3 步。构建您的 class 文件,您将获得一个 batch_report.dll 文件。将此 .dll 添加到项目的引用文件夹中。

步骤 4. 从工具箱添加报告或报告向导。当您添加 window 时,将打开请求数据集。命名您的数据集,然后在下拉列表 list.In "Available Datasets"select 的数据源 select batch_report 中,您从中获取数据的方法在我的例子中来自 Custom_batch class 方法是 - GetEmployeeName().

第 5 步。单击“下一步”直到完成,之后您也可以设计您的报告。