c# 行轉列動態賦值給layui


數據庫存儲格式

期望前端顯示樣式

以下是代碼:

(1)控制器:

        [HttpGet("SocialImportLedgerInfo")]
        public ResultData GetSocialImportLedgerInfo()
        {
            ResultData result = new ResultData();
            string json = socialHandler.RowsToColumn();
            if (json != null)
            {
                result.Data = json;
                result.Code = 200;
                result.Msg = "成功";
            }
            else
            {
                result.Data = null;
                result.Code = 500;
                result.Msg = "無數據";
            }

            return result;
        }

 

(2)邏輯層數據處理

       public string RowsToColumn()
        {
            string json = JsonConvert.SerializeObject(socialRepositories.RowsToColumn(), new KeyValuePairConverter());
            return json;
        }

 

 (3)倉儲層數據源

        public object[] RowsToColumn()
        {
            var SocialImportLedgerInfo = (from b in db.SocialImportLedger
                                   where b.IsPaymentBill == 0
                                   select new
                                   {
                                       Name = b.Name,
                                       Value = b.Value,
                                       EmlpoyeeId = b.EmlpoyeeId
                                   }).ToArray();

            if (SocialImportLedgerInfo.Length > 0)
            {
                return SocialImportLedgerInfo.ToPivotArray(i => i.Name, i => i.EmlpoyeeId, items => items.Any() ? items.FirstOrDefault().Value : null);
            }
            else
            {
                return null;
            }
        }
    }

(4)行轉列方法:ToPivotArray

   public static class RowToColumnHelper
    {
        public static dynamic[] ToPivotArray<T, TColumn, TRow, TData>(this IEnumerable<T> source, Func<T, TColumn> columnSelector, Expression<Func<T, TRow>> rowSelector, Func<IEnumerable<T>, TData> dataSelector)
        {
            var arr = new List<object>();
            var cols = new List<string>();
            string rowName = ((MemberExpression)rowSelector.Body).Member.Name;
            var columns = source.Select(columnSelector).Distinct();

            cols = (new[] { rowName }).Concat(columns.Select(x => x.ToString())).ToList();

            var rows = source.GroupBy(rowSelector.Compile())
                             .Select(rowGroup => new
                             {
                                 Key = rowGroup.Key,
                                 Values = columns.GroupJoin(
                                     rowGroup,
                                     c => c,
                                     r => columnSelector(r),
                                     (c, columnGroup) => dataSelector(columnGroup))
                             }).ToArray();

            foreach (var row in rows)
            {
                var items = row.Values.Cast<object>().ToList();
                items.Insert(0, row.Key);
                var obj = GetAnonymousObject(cols, items);
                arr.Add(obj);
            }

            return arr.ToArray();
        }

        private static dynamic GetAnonymousObject(IEnumerable<string> columns, IEnumerable<object> values)
        {
            IDictionary<string, object> eo = new ExpandoObject() as IDictionary<string, object>;
            int i;
            for (i = 0; i < columns.Count(); i++)
            {
                eo.Add(columns.ElementAt(i), values.ElementAt(i));
            }

            return eo;
        }
    }

(5)前端layui接收

@{
    ViewData["Title"] = "SocialSettlementPayment";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<div class="layui-container">
    <script type="text/html" id="barDemo">
        <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">查看</a>
        <a class="layui-btn layui-btn-xs" lay-event="edit">編輯</a>
        <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">刪除</a>
    </script>

    <table class="layui-hide" id="socialList" lay-filter="socialList"></table>
</div>
<script>
    var a;
    $.ajax({
        url: '/Social/SocialImportLedgerInfo',
        type: 'get',
        dataType: "json",
        success: function (result) {
            var b = JSON.parse(result.data);
            console.log(b);

            datalist = [{ checkbox: true, fixed: "left", width: 40, templet: '#indexTpl' }];

            $.each(b[0], function (name, value) {
                console.log(name);
                var f = {};
                f.field = name;
                f.title = name;
                f.width = 250;
                datalist.push(f);
            });
            console.log(datalist);

            layui.use('table', function () {
                var table = layui.table;

                //展示已知數據
                table.render({
                    elem: '#socialList'
                    , cols: [datalist]
                    , data: b
                    , even: true
                    , page: true //是否顯示分頁
                    , toolbar: 'default' //開啟工具欄,此處顯示默認圖標,可以自定義模板,詳見文檔
                    ,limits: [10, 20, 50, 100, 500, 1000]
                    ,limit: 10 //每頁默認顯示的數量
                });

                //監聽頭工具欄事件
                table.on('toolbar(test)', function (obj) {
                    var checkStatus = table.checkStatus(obj.config.id)
                        , data = checkStatus.data; //獲取選中的數據
                    switch (obj.event) {
                        case 'add':
                            layer.msg('添加');
                            break;
                        case 'update':
                            if (data.length === 0) {
                                layer.msg('請選擇一行');
                            } else if (data.length > 1) {
                                layer.msg('只能同時編輯一個');
                            } else {
                                layer.alert('編輯 [id]:' + checkStatus.data[0].id);
                            }
                            break;
                        case 'delete':
                            if (data.length === 0) {
                                layer.msg('請選擇一行');
                            } else {
                                layer.msg('刪除');
                            }
                            break;
                    };
                });

                //監聽行工具事件
                table.on('tool(test)', function (obj) { //注:tool 是工具條事件名,test 是 table 原始容器的屬性 lay-filter="對應的值"
                    var data = obj.data //獲得當前行數據
                        , layEvent = obj.event; //獲得 lay-event 對應的值
                    if (layEvent === 'detail') {
                        layer.msg('查看操作');
                    } else if (layEvent === 'del') {
                        layer.confirm('真的刪除行么', function (index) {
                            obj.del(); //刪除對應行(tr)的DOM結構
                            layer.close(index);
                            //向服務端發送刪除指令
                        });
                    } else if (layEvent === 'edit') {
                        layer.msg('編輯操作');
                    }
                });
            });
        }
    });
</script>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM