.net+layui 页面展示动态 数据

 

由于需求的需要,一些页面需要展示动态的字段,根据一部分数据进行动态的展示。

在百度上并未找到很好的解决方案,但是也提供了相应的思路。

首先从数据库获取数据时就应该是行转列 已经OK的数据。然后返回一个table数据。这时候就要对这个table进行处理,layui的table需要先定义好字段,

而动态的字段是事先预料不到的,而且字段个数不确定,所以需要进行动态处理。

先获取这个table的表头返回至前端。先动态创建表头,然后在展示数据。

 

接下来先看看界面上的设置,先定义好固定的列以下是固定列头,先定义好

        var attrCols = [
            [ //表头
                { field: 'id', title: 'ID', width: 80, rowspan: 2 }
                , { field: 'brand_name', title: '品牌名称', width: 120, rowspan: 2 }
                , { field: 'system_name', title: '系列名称', width: 100, rowspan: 2 }
                , { field: 'plat_form', title: '平台', width: 100, rowspan: 2 }
                , { field: 'internal_code', title: '种植代码', width: 100, rowspan: 2 }
                , { field: '', title: 'Analog', colspan: 2, align: 'center' }
                , { field: '', title: 'Scanbody', colspan: 2, align: 'center' }
            ],
            [ //表头
                { field: 'analog_dess_model', title: 'DESS型号', align: 'center', width: 110, sort: true }
                , { field: 'analog_model', title: '原装型号', align: 'center', width: 110, sort: true }
                , { field: 'scanbody_dess_model', title: 'DESS型号', align: 'center', width: 110, sort: true }
                , { field: 'scanbody_model', title: '原装型号', align: 'center', width: 110, sort: true }
            ]
        ];

然后在通过获取表头数据的接口获取动态表头:

        var strfield = {};
        $.get('/Ajax/AjaxIOSDataInfo.ashx?type=GetIOSDataReportTableTitle', { "brandid": brandid }, function (objdata) {
            var obj = JSON.parse(objdata);
            //动态表头
            for (m in obj.data) {
                var data1 = obj.data[m];
                strfield = { field: data1["TitleName"], title: data1["TitleName"], align: 'center', width: 110, rowspan: 2 };
                attrCols[0].push(strfield);
            }

       // TODO:其他处理数据表格数据.......

    });

 

然后是处理其他表格中的数据,就是layui的正常Table数据处理,这段代码是要放在上面获取动态表头中的,需要获取动态表头之后在获取内容

var findtab = table.render({
                elem: '#iosDataReport'
                , id: 'iosDataReportload'
                , where: {
                    brandid: '',
                    systemid: '',
                    platform: '',
                    internalCode: '',
                    scanName: ''
                }
                , parseData: function (res) {
                    return {
                        "code": 0,
                        "count": res.count,
                        "msg": res.message,
                        "data": JSON.parse(res.data)
                    }
                }
                , url: '/Ajax/AjaxIOSDataInfo.ashx?type=GetIOSDataReportInfo'  //数据接口
                , page: false //开启分页
                , limit: 20 //每页默认显示的数量
                , toolbar: '#toolbar_iosDataReport'  
                , defaultToolbar: [] 
                , cols: attrCols //所有字段:固定列+动态列
            });

 

完整的前端Layui代码

    var $;
    layui.use(['form', 'table'], function () {
        var table = layui.table;
        var form = layui.form;
        $ = layui.$;



 var attrCols = [
            [ //表头
                { field: 'id', title: 'ID', width: 80, rowspan: 2 }
                , { field: 'brand_name', title: '品牌名称', width: 120, rowspan: 2 }
                , { field: 'system_name', title: '系列名称', width: 100, rowspan: 2 }
                , { field: 'plat_form', title: '平台', width: 100, rowspan: 2 }
                , { field: 'internal_code', title: '种植代码', width: 100, rowspan: 2 }
                , { field: '', title: 'Analog', colspan: 2, align: 'center' }
                , { field: '', title: 'Scanbody', colspan: 2, align: 'center' }
            ],
            [ //表头
                { field: 'analog_dess_model', title: 'DESS型号', align: 'center', width: 110, sort: true }
                , { field: 'analog_model', title: '原装型号', align: 'center', width: 110, sort: true }
                , { field: 'scanbody_dess_model', title: 'DESS型号', align: 'center', width: 110, sort: true }
                , { field: 'scanbody_model', title: '原装型号', align: 'center', width: 110, sort: true }
            ]
        ];
        var strfield = {};
        $.get('/Ajax/AjaxIOSDataInfo.ashx?type=GetIOSDataReportTableTitle', { "brandid": brandid, "systemid": systemid, "platform": platform, "internalCode": internalcode, "scanName": scanname }, function (objdata) {
            var obj = JSON.parse(objdata);
            //动态表头
            for (m in obj.data) {
                var data1 = obj.data[m];
                strfield = { field: data1["TitleName"], title: data1["TitleName"], align: 'center', width: 110, rowspan: 2 };
                attrCols[0].push(strfield);
            }
            var findtab = table.render({
                elem: '#iosDataReport'
                , id: 'iosDataReportload'
                , where: {
                    brandid: '',
                    systemid: '',
                    platform: '',
                    internalCode: '',
                    scanName: ''
                }
                , parseData: function (res) {
                    return {
                        "code": 0,
                        "count": res.count,
                        "msg": res.message,
                        "data": JSON.parse(res.data)
                    }
                }
                , url: '/Ajax/AjaxIOSDataInfo.ashx?type=GetIOSDataReportInfo'  //数据接口
                , page: false //开启分页
                , limit: 20 //每页默认显示的数量
                , toolbar: '#toolbar_iosDataReport'  
                , defaultToolbar: [] 
                , cols: attrCols //所有字段:固定列+动态列
            });
            //界面搜索
            $('#searchBtn').on('click', function () {
                findtab.config.where.brandid = $('#brand_name_id').val()
                findtab.config.where.systemid = $('#system_name_id').val()
                findtab.config.where.platform = $('#platform_id').val()
                findtab.config.where.internalCode = $('#internal_code_id').val()
                findtab.config.where.scanName = $('#scan_name_id').val()
                findtab.reload('iosDataReportload', {
                    url: '/Ajax/AjaxIOSDataInfo.ashx?type=GetIOSDataReportInfo'  //数据接口
                    , page: {
                        curr: 1
                    }
                });
                return false;
            });
        })




});

 

这里面最主要的一段代码,是将接口中的json字符串进行转换:因为后端是直接根据table表格转为json字符串的。没有具体实体类,没得转为json对象,所以需要返回到前端在进行转换。

, parseData: function (res) {
             return {
                        "code": 0,
                        "count": res.count,
                        "msg": res.message,
                        "data": JSON.parse(res.data) //将json字符串转为json对象
                    }
       }                 

 

 

 

这里涉及到 2个接口

1、GetIOSDataReportTableTitle  获取表头

2、GetIOSDataReportInfo 获取表格数据

 

后端接口处理方式:

1、GetIOSDataReportTableTitle 

 DataSet ds = iOSDataInfoBusiness.GetRptIOSDataReport(brandID, systemID, platID, internalCode, scanName);
            DataTable dataTable = ds.Tables[0];
       //过滤固定字段,只返回动态字段
            string [] filedarr = new string[] { "id", "brand_name", "system_name", "plat_form", "internal_code", "analog_dess_model", "analog_model", "scanbody_dess_model", "scanbody_model", "brandID", "systemID" };
            foreach (DataColumn col in dataTable.Columns)
            {
                if(!((IList)filedarr).Contains(col.ColumnName))
                {
                    tableTitle = new IOSDataReportTableTitle();
                    tableTitle.TitleName = col.ColumnName;
                    list.Add(tableTitle);
                }
              
            }

 

 

2、GetIOSDataReportInfo 

//接口主要代码,将table转为json字符
DataSet ds = iOSDataInfoBusiness.GetRptIOSDataReport(brandID, systemID, platID,internalCode,scanName);
            DataTable dataTable = ds.Tables.Count == 0 ? null : ds.Tables[0];
            if(ds.Tables.Count > 0)
            {
                objJson = JsonSwitchCls.TabToJson(dataTable);
            }







         /// <summary>
         /// 将datatable转换为json  
         /// </summary>
         /// <param name="dtb">Dt</param>
         /// <returns>JSON字符串</returns>
         public static string TabToJson(DataTable dtb)
         {
             JavaScriptSerializer jss = new JavaScriptSerializer();
             System.Collections.ArrayList dic = new System.Collections.ArrayList();
             foreach (DataRow dr in dtb.Rows)
             {
                 System.Collections.Generic.Dictionary<string, object> drow = new System.Collections.Generic.Dictionary<string, object>();
                 foreach (DataColumn dc in dtb.Columns)
                 {
                     drow.Add(dc.ColumnName, dr[dc.ColumnName]);
                 }
                 dic.Add(drow);
 
             }
             //序列化  
             return jss.Serialize(dic);
         }

 

 

最终效果如下图:

.net+layui 页面展示动态 数据

 

上一篇:Vue中移除监听事件


下一篇:关于Swiper插件的使用