HTML:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>layui和Table</title>
<link href="~/Content/layui/css/layui.css" rel="stylesheet" />
<script src="~/Content/layui/layui.js"></script>
<script src="~/Content/layui/tableSelect.js"></script>
</head>
<body>
<div>
<!--脱离table的按钮-->
<div class="layui-btn-group demoTable">
<button class="layui-btn" data-type="getCheckData">获取选中行数据</button>
<button class="layui-btn" data-type="getCheckLength">获取选中数目</button>
<button class="layui-btn" data-type="isAll">验证是否全选</button>
<input class="layui-text" type="text" id="txtSearch" placeholder="查询条件" />
<button class="layui-btn" data-type="Search">查询</button>
</div>
<!--table的toolbar 需layui-hide隐藏-->
<div class="layui-hide layui-btn-group" id="toolbar">
<button class="layui-btn " lay-event="getall">查看所选数据</button>
<button class="layui-btn " lay-event="getnum">查看所选数量</button>
<button class="layui-btn layui-btn-danger" lay-event="delall">批量删除</button>
</div>
<!--表格-->
<table class="layui-table" id="idTest" lay-filter="demo"></table>
<!--表格的操作列的模板: toolbar: '#barDemo' -->
<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>
</div>
<script>
layui.use('table', function () {
var $ = layui.$;//在layui里引用jQuery
var table = layui.table;//实例化layui 表格
//执行表格渲染 方法化渲染 推荐
var tableIns = table.render({
elem: '#idTest' //指定原始表格元素选择器(推荐id选择器)
, url: '/Demo/TableList'//数据接口地址
, where: { search: $('#txtSearch').val() }//查询条件,类似 ajax的date属性
, height: 400 //容器高度
, width: 1000
, toolbar: '#toolbar'//开启头部栏,写入我们的盒子id
, cols: [[//表头及字段绑定:
{ type: 'checkbox', fixed: 'left' },//type:控件类型
{ field: 'UID', sort: true, fixed: true, title: "UID" },//fixed是冻结列
{ field: 'USERNAME', sort: true, fixed: true, title: "USERNAME" },//sort:是否排序
{ field: 'NICKNAME', title: "NICKNAME", edit: 'text' },//field:绑定字段
{ field: 'EMAIL', title: "EMAIL", edit: 'text' },//title:表头名称
{ field: 'MOBILE', title: "MOBILE", edit: true },//edit: 'text' 可编辑状态,编辑类型是文本
{ fixed: 'right', width: 178, align: 'center', toolbar: '#barDemo' }//toolbar操作列的模板
]], //设置表头
page: true,//开启分页
limit: 5,//每页最大行数
limits: [5, 10, 15, 20]//最大行数集合
});
//demo就是: lay-filter="demo" (table的)
//监听表格复选框选择
table.on('checkbox(demo)', function (obj) {
console.log(obj)
});
//监听table内操作按钮
table.on('tool(demo)', function (obj) {
var data = obj.data;
if (obj.event === 'detail') {
layer.msg('UID:' + data.UID + ' 的查看操作');
//查看操作
} else if (obj.event === 'del') {
layer.confirm('真的删除吗?', function (index) {
obj.del(); //删除对应行(tr)的DOM结构,并更新缓存
//删除操作
layer.close(index);
});
} else if (obj.event === 'edit') {
layer.alert('编辑行:<br>' + JSON.stringify(data))
}
});
//监听table外按钮
var $ = layui.$, active = {
getCheckData: function () { //获取选中数据
var checkStatus = table.checkStatus('idTest')
, data = checkStatus.data;
layer.alert(JSON.stringify(data));
}
, getCheckLength: function () { //获取选中数目
var checkStatus = table.checkStatus('idTest')
, data = checkStatus.data;
layer.msg('选中了:' + data.length + ' 个');
}
, isAll: function () { //验证是否全选
var checkStatus = table.checkStatus('idTest');
layer.msg(checkStatus.isAll ? '全选' : '未全选')
}, Search: function () { //表格的查询按钮
tableIns.reload({
where: { search: $('#txtSearch').val() }
, page: { curr: 1 }
});
}
};
//监听 data-type 值
$('.demoTable .layui-btn').on('click', function () {
var type = $(this).data('type'); //alert(type);
active[type] ? active[type].call(this) : '';
});
//监听 toolbar 按钮
table.on('toolbar(demo)', function (obj) {//我给表格设置的lay-filter叫demo
var checkStatus = table.checkStatus('idTest')//表格id,获取选中行
switch (obj.event) {//对lay-event的值,进行不同的判断
case 'getall'://lay-event
layer.msg(JSON.stringify(checkStatus.data));
break;
case 'getnum'://lay-event
layer.msg(JSON.stringify(checkStatus.data.length));
break;
case 'delall'://lay-event
var a = [];
for (var i = 0; i < checkStatus.data.length; i++) {
a.push(checkStatus.data[i].UID)
}
let strid = a.toString();//数组转字符串 用,逗号间隔
layer.msg(strid);
let num = checkStatus.data.length;
if (num != 0) {
//$.ajax({
// url: '/Controller/delete?ids=' + strid
// , type: 'get'
// , success: function (d) {
// layer.msg("删除了" + num + "条数据");
// location.href = '/Controller/index';
// }
//})
}
else {
layer.msg("至少选择一个!")
}
break;
}
});
//编辑table
listenTableEdit('/Demo/TableUpdate', 'demo', 'POST');//'demo'就是table的lay-filter="demo"
//监听表格edit事件
function listenTableEdit(url, tableElem, type) {
table.on('edit(' + tableElem + ')', function (obj) {
var dataLine = obj.data //得到所在行所有键值
, field = obj.field //得到字段
, value = obj.value; //得到修改后的值
// console.log(dataLine);
// console.log(field);
// console.log(value);
// console.log(dataLine.UID); //主键ID
let data = { UID: dataLine.UID };
data[field] = value;
updateData(url, data, tableElem, type)
});
}
//更新数据
function updateData(url, data, tableElem, type) {
//console.log(data); //打印看数据
type = type ? type : 'POST';
$.ajax({
url: url, //请求地址
data: data,
type: type,
beforeSend: function () {
layer.load(1); //开启加载效果
},
success: function (res) {
layer.closeAll(); //关闭加载效果
layer.msg(res.msg, { time: 1000 }, function () {
table.reload(tableElem);
});
},
error: function (res) {
layer.closeAll(); //关闭加载效果
console.log(res); //根据res的返回结果输出数据,我这里为了演示,直接输出 '服务器异常'
layer.alert('服务器异常');
}
});
}
});
</script>
<hr />
<!--弹窗传值-->
<div class="layui-form-item">
<div class="layui-input-inline">
<table width="400">
<tr>
<td>点击并选择:</td>
<td><input type="text" name="" placeholder="NICKNAME" autocomplete="off" class="layui-input" id="demo"></td>
<td><label id="lab_USERNAME">USERNAME</label></td>
</tr>
</table>
</div>
</div>
<script type="text/javascript">
var form = layui.form;
form.render();
var tableSelect = layui.tableSelect;
var $ = layui.$;//jQuery
tableSelect.render({
elem: '#demo',//id="demo"的text
checkedKey: 'id',
searchPlaceholder: 'NICKNAME',//搜索框的Placeholder
searchKey: 'search',//后台获取方法: string search = Request["search"];// "search"可以改成任何你需要的参数名称,例:?search=管理员
table: {
url: '/Demo/TableList',
cols: [[
//{ type: 'checkbox' }, //多选
{ type: 'radio' },//单选
{ field: 'UID', sort: true, title: "UID" },//field:绑定字段
{ field: 'USERNAME', sort: true, title: "USERNAME" },//sort:是否排序
{ field: 'NICKNAME', title: "NICKNAME" },//title:表头名称
]]
},
done: function (elem, data) {
var NICKNAME_JSON = [];
var USERNAME_JSON = [];
layui.each(data.data, function (index, item) {
NICKNAME_JSON.push(item.NICKNAME)
USERNAME_JSON.push(item.USERNAME)
})
elem.val(NICKNAME_JSON.join(","));
$("#lab_USERNAME").html(USERNAME_JSON.join(","));
}
})
</script>
</body>
</html>
mvc:
using System;
using System.Web.Mvc;
using XrErp.DAL;
using XrErp.Model;
using SqlSugar;
using FluentNHibernate.Data;
namespace XrErp.Web.Controllers
{
public class DemoController : Controller
{
public ActionResult Table()
{
return View();
}
public ActionResult TableList()
{
try
{
int pageIndex = Convert.ToInt32(Request["page"]);//页码
int pageSize = Convert.ToInt32(Request["limit"]);//页宽
string search = Request["search"];//查询条件
string where = string.IsNullOrWhiteSpace(search) ? "" : " NICKNAME LIKE '%" + search + "%'";//查询条件
string orderBy = "";//排序条件
int totalCount = 0;//总记录数
BaseDal<SYS_USER> baseDal = new BaseDal<SYS_USER>();//SqlSugar
var list = baseDal.Query(where, pageIndex, pageSize, ref totalCount, orderBy);//分页查询
var obj = new { code = 0, msg = "", count = totalCount, data = list };
return Json(obj, JsonRequestBehavior.AllowGet);
}
catch
{
return View();
}
}
public ActionResult TableUpdate()
{
var obj = new { code = 0, msg = "" };
try
{
int UID = Convert.ToInt32(Request["UID"]);//UID
string NICKNAME = Request["NICKNAME"];//NICKNAME
string EMAIL = Request["EMAIL"];//EMAIL
string MOBILE = Request["MOBILE"];//MOBILE
string sql = " UPDATE SYS_USER SET ";
sql += " UID=" + UID;//用于卡一个逗号,
if (!string.IsNullOrWhiteSpace(NICKNAME))
{
sql += " ,NICKNAME='" + NICKNAME + "'";
}
if (!string.IsNullOrWhiteSpace(EMAIL))
{
sql += " ,EMAIL='" + EMAIL + "'";
}
if (!string.IsNullOrWhiteSpace(MOBILE))
{
sql += " ,MOBILE='" + MOBILE + "'";
}
sql += " where UID=" + UID;
var db = DbContext.GetSqlSugarClient();
var b = db.Ado.ExecuteCommand(sql) > 0;
if (b)
obj = new { code = 100, msg = "成功" };
else
obj = new { code = 200, msg = "失败" };
}
catch (Exception ex)
{
obj = new { code = 404, msg = "报错," + ex.Message };
}
return Json(obj, JsonRequestBehavior.AllowGet);
}
}
}
预览:

这篇文章展示了如何在HTML页面中使用layui框架来创建表格,包括设置表头、数据接口、操作列、复选框功能以及表格外的按钮操作。通过Ajax与后端MVC控制器交互,实现了数据查询、编辑、删除以及弹窗传值等功能。

1万+

被折叠的 条评论
为什么被折叠?



