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.静态行转列 --静态的行转列 --新建一个科目成绩表 - ...
随机推荐
- netty-socketio 概述
netty-socketio 概述 netty-socketio是一个开源的Socket.io服务器端的一个java的实现,它基于Netty框架,可用于服务端推送消息给客户端. 说到服务端推送技术,一 ...
- Hibernate(十四)抓取策略
抓取策略: 抓取策略是当应用程序需要在(Hibernate实体对象图的)关联关系间进行导航的时候,Hibernate如何获取关联对象的策略.Hibernate的抓取策略是Hibernate提升性能的一 ...
- 微信小程序使用wxParse,解决图片显示路径问题
我们经常用到发布文章,用的是UEditor百度富文本编辑器,方便排版,存储的也是html代码,这样小程序解析出来的也是排版的样式,但是使用wxParse解析html的时候,因为存储的是图片的相对路径, ...
- C# 实现FTP客户端
本文是利用C# 实现FTP客户端的小例子,主要实现上传,下载,删除等功能,以供学习分享使用. 思路: 通过读取FTP站点的目录信息,列出对应的文件及文件夹. 双击目录,则显示子目录,如果是文件,则点击 ...
- 初见jQuery EasyUI
本文通过一个简单的小例子,简述jQuery EasyUI的使用方法,仅供学习分享使用,如有不足之处,还请指正. 什么是jQuery EasyUI ? 引用官网的一句话:jQuery EasyUI fr ...
- Jump Flood Algorithms for Centroidal Voronoi Tessellation
Brief Implemented both CPU and GPU version, you could consider this as the basic playground to imple ...
- JavaWeb:servlet实现下载与上传功能
本文内容: servlet实现下载功能 servlet实现上传功能 首发日期:2018-07-21 servlet实现下载功能 实现流程 1.首先制作一个jsp页面,主要是用来触发下载的.这里可以根据 ...
- Vue 加载第三方插件
如添加jquery. 在终端项目根目录输入命令: npm i -D jquery 等待安装完成 编辑/build/webpack.base.conf.js,在resolve的alias下添加'jque ...
- 虚拟机中安装Virtualbox,嵌套的虚拟机不能运行64位系统
https://www.quora.com/Can-I-install-Virtualbox-in-a-virtual-machine Here is a previous question on Q ...
- Orchard详解--第八篇 拓展模块及引用的预处理
从上一篇可以看出Orchard在处理拓展模块时主要有两个组件,一个是Folder另一个是Loader,前者用于搜索后者用于加载. 其中Folder一共有三个:Module Folder.Core Fo ...