c# 行转列动态赋值给layui
数据库存储格式

期望前端显示样式

以下是代码:
(1)控制器:
[HttpGet("SocialImportLedgerInfo")]
public ResultData GetSocialImportLedgerInfo()
{
ResultData result = new ResultData();
string json = socialHandler.RowsToColumn();
if (json != null)
{
result.Data = json;
result.Code = ;
result.Msg = "成功";
}
else
{
result.Data = null;
result.Code = ;
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 ==
select new
{
Name = b.Name,
Value = b.Value,
EmlpoyeeId = b.EmlpoyeeId
}).ToArray(); if (SocialImportLedgerInfo.Length > )
{
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(, 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 = ; 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: , templet: '#indexTpl' }];
$.each(b[], function (name, value) {
console.log(name);
var f = {};
f.field = name;
f.title = name;
f.width = ;
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: [, , , , , ]
,limit: //每页默认显示的数量
});
//监听头工具栏事件
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 === ) {
layer.msg('请选择一行');
} else if (data.length > ) {
layer.msg('只能同时编辑一个');
} else {
layer.alert('编辑 [id]:' + checkStatus.data[].id);
}
break;
case 'delete':
if (data.length === ) {
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>
c# 行转列动态赋值给layui的更多相关文章
- 在论坛中出现的比较难的sql问题:39(动态行转列 动态日期列问题)
原文:在论坛中出现的比较难的sql问题:39(动态行转列 动态日期列问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉 ...
- PCB MS SQL 行转列(动态拼SQL)
一.原数据: SELECT inman,indate FROM [fp_db].[dbo].[ppezhpbb] WHERE indate > '2016-5-1' AND indate < ...
- Oracle 行转列 动态出转换的列
本文链接:https://blog.csdn.net/Huay_Li/article/details/82924443 10月的第二天,前天写了个Oracle中行转列的pivot的基本使用方法,然后, ...
- SQL行转列+动态拼接SQL
数据源 Name AreaName qty Specific 叶玲 1 60 1 叶玲 2 1 1 叶玲 6 1 0 叶玲 7 5 0 叶玲 8 1 1 显示效果: Name 1 2 8 ...
- mysql动态行转列
测试数据 DROP TABLE IF EXISTS `score`; CREATE TABLE `score` ( `id` ) NOT NULL AUTO_INCREMENT, `class` ) ...
- SQL 行转列和列转行
SQL 行转列和列转行 行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过 ...
- SQL行转列和列转行
行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过了,却没有系统性的认识和 ...
- sql行转列和列转行(转)
行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过了,却没有系统性的认识和 ...
- 老生常谈之SQL Server (行转列,列转行)
Open the first article 在本文章中主要介绍以下内容: 1.静态行转列 2.静态列转行 3.动态行转列 4.动态列转行 1.静态行转列 --静态的行转列 --新建一个科目成绩表 - ...
随机推荐
- RNN-LSTM入门
RNN-LSTM入门 Last Edited: Dec 02, 2018 10:20 PM Tags: 机器学习,论文阅读 RNN-Recurrent Neural Network 概念: 序列数据: ...
- echarts tab 切换问题整理
一.bootstrap tabs 解决方案 方式一 tab切换echarts无法正常显示 https://blog.csdn.net/cjs68/article/details/78072382 ta ...
- 模块热替换 HMR
devserver:{hot:true},既及时更新代码,样式(需配合loader)变化,自动重编译,只适用于开发环境. 入口文件中,添加监视: + if (module.hot) {+ module ...
- Python3 系列之 基础语法篇
基础数据类型 整数 python 可以处理任意大小的整数 浮点数 python 可以处理任意大小的浮点数,但是需要注意的一点是:整数运算永远是精确的(除法也是精确的),而浮点数运算则可能会有四舍五入的 ...
- SVG的学习(34—36)
使用js来动态绘制svg图片,首先就是要创建svg 节点. 使用createElementNS(),语法: document.createElementNS(namespaceURI, qualifi ...
- windows生成当前目录树
tree /f > list.txt 需要以管理员运行cmd
- IE6不兼容问题
IE6不兼容问题 一.选择器兼容问题 1.交集选择器从IE7以上兼容(div.special): 2.儿子选择器(>):IE7开始兼容,IE6不兼容. 3.序选择器(first ...
- HTML5为输入框添加语音输入功能
这里介绍的是大家以后要用到的html强大功能,可直接给输入框增加语音功能,下面我们先来看看实现方法. 大家可以看到在输入框右边的麦克风图标,点击麦克风就能够进行语音识别了. 其实很简单,语音识别是ht ...
- Python 标准类库-日期类型之datetime模块
标准类库-日期类型之datetime模块 by:授客 QQ:1033553122 可用类型 3 实践出真知 4 timedelta对象 4 class datetime.timedelta(da ...
- Android Service、IntentService,Service和组件间通信
Service组件 Service 和Activity 一样同为Android 的四大组件之一,并且他们都有各自的生命周期,要想掌握Service 的用法,那就要了解Service 的生命周期有哪些方 ...