layui的table查询编辑&tableSelect控件使用

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

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>&nbsp;
            <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);
        }
    }
}

 预览:

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值