zoukankan      html  css  js  c++  java
  • Bootstraptable 账号维护

    https://www.cnblogs.com/laowangc/p/8875526.html

    https://www.cnblogs.com/landeanfen/p/4976838.html

     1、怎样使用BootStrap Table

    bootstrap-table是一款非常有名的开源表格插件,在很多项目中广泛的应用。Bootstrap-table插件提供了非常丰富的属性设置,可以实现查询、分页、排序、复选框、设置显示列、Card view视图、主从表显示、合并列、国际化处理等处理功能,而且该插件同时也提供了一些不错的扩展功能,如移动行、移动列位置等一些特殊的功能,插件可以用基于HTML5的data-*属性标识设置,也可以使用Javascript方式进行设置,非常方便。

    Bootstrap-Table显示数据到表格的方式有两种,一种是客户端(client)模式,一种是服务器(server)模式。

      客户端模式:服务器一次加载全部数据,以JSON格式传到页面,然后根据你设置的每页记录数,自动生成分页。当点击第二页时,不会再向服务器发送请求。同时用户可以使用其自带的搜索功能,可以实现全数据搜索。对于数据量较少的时候,可以使用这个方法。

      服务器模式:指的是根据设定的每页记录数和当前要显示的页码,发送数据到服务器进行查询,然后再显示到表格中。该方法可以根据用户的需要动态的加载数据,节省了服务器的资源,但是不能使用其自带的全数据搜索功能。

    Bootstrap-table是基于Boostrap开发的插件,因此使用时需引入Bootstrap的脚本和样式、jquery脚本。

    <link rel="stylesheet" href="bootstrap.min.css">
    <link rel="stylesheet" href="bootstrap-table.css">
    <script src="jquery.min.js"></script>
    <script src="bootstrap.min.js"></script>
    <script src="bootstrap-table.js"></script>
    <--汉化文件,放在 bootstrap-table.js 后面-->
    <script src="bootstrap-table-zh-CN.js"></script>

    bootstrap-table在页面中的使用,可以分为两种,一种是纯粹用HTML5的写法,通过data-*的方式指定各种属性设置,一种是HTML+JS方式实现弹性设置。

    采用HTML5标识的方式初始化表格插件的HTML代码如下:

    <table data-toggle="table" data-url="data1.json">
        <thead>
            <tr>
                <th data-field="id">Item ID</th>
                <th data-field="name">Item Name</th>
                <th data-field="price">Item Price</th>
            </tr>
        </thead>
    </table>

    采用JS代码方式来初始化表格插件,只需在HTML上声明一个表格对象即可,代码如下:

    <table id="table"></table>

    js代码如下:

    $('#table').bootstrapTable({
        url: 'data1.json',
        columns: [{
            field: 'id',
            title: 'Item ID'
        }, {
            field: 'name',
            title: 'Item Name'
        }, {
            field: 'price',
            title: 'Item Price'
        }, ]
    });

    实际应用js代码要复杂得多。

     

    2、实际应用的js代码

    var $table;
            //初始化bootstrap-table的内容
            function InitMainTable () {
                //记录页面bootstrap-table全局变量$table,方便应用
                var queryUrl = '/TestUser/SelectWithPager?rnd=' + Math.random()
                $table = $('#grid').bootstrapTable({
                    url: queryUrl,                      //请求后台的URL(*)
                    method: 'GET',                      //请求方式(*)
                    //toolbar: '#toolbar',              //工具按钮用哪个容器
                    striped: true,                      //是否显示行间隔色
                    cache: false,                       //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
                    pagination: true,                   //是否显示分页(*)
                    sortable: true,                     //是否启用排序
                    sortOrder: "asc",                   //排序方式
                    sidePagination: "server",           //分页方式:client客户端分页,server服务端分页(*)
                    pageNumber: 1,                      //初始化加载第一页,默认第一页,并记录
                    pageSize: rows,                     //每页的记录行数(*)
                    pageList: [10, 25, 50, 100],        //可供选择的每页的行数(*)
                    search: false,                      //是否显示表格搜索
                    strictSearch: true,
                    showColumns: true,                  //是否显示所有的列(选择显示的列)
                    showRefresh: true,                  //是否显示刷新按钮
                    minimumCountColumns: 2,             //最少允许的列数
                    clickToSelect: true,                //是否启用点击选中行
                    //height: 500,                      //行高,如果没有设置height属性,表格自动根据记录条数觉得表格高度
                    uniqueId: "ID",                     //每一行的唯一标识,一般为主键列
                    showToggle: true,                   //是否显示详细视图和列表视图的切换按钮
                    cardView: false,                    //是否显示详细视图
                    detailView: false,                  //是否显示父子表
                    //得到查询的参数
                    queryParams : function (params) {
                        //这里的键的名字和控制器的变量名必须一致,这边改动,控制器也需要改成一样的
                        var temp = {
                            rows: params.limit,                         //页面大小
                            page: (params.offset / params.limit) + 1,   //页码
                            sort: params.sort,      //排序列名
                            sortOrder: params.order //排位命令(desc,asc)
                        };
                        return temp;
                    },
                    columns: [{
                        checkbox: true,
                        visible: true                  //是否显示复选框
                    }, {
                        field: 'Name',
                        title: '姓名',
                        sortable: true
                    }, {
                        field: 'Mobile',
                        title: '手机',
                        sortable: true
                    }, {
                        field: 'Email',
                        title: '邮箱',
                        sortable: true,
                        formatter: emailFormatter
                    }, {
                        field: 'Homepage',
                        title: '主页',
                        formatter: linkFormatter
                    }, {
                        field: 'Hobby',
                        title: '兴趣爱好'
                    }, {
                        field: 'Gender',
                        title: '性别',
                        sortable: true
                    }, {
                        field: 'Age',
                        title: '年龄'
                    }, {
                        field: 'BirthDate',
                        title: '出生日期',
                        formatter: dateFormatter
                    }, {
                        field: 'Height',
                        title: '身高'
                    }, {
                        field: 'Note',
                        title: '备注'
                    }, {
                        field:'ID',
                        title: '操作',
                         120,
                        align: 'center',
                        valign: 'middle',
                        formatter: actionFormatter
                    }, ],
                    onLoadSuccess: function () {
                    },
                    onLoadError: function () {
                        showTips("数据加载失败!");
                    },
                    onDblClickRow: function (row, $element) {
                        var id = row.ID;
                        EditViewById(id, 'view');
                    },
                });
            };

    2.1、查询及分页

    采用服务器分页的方式,根据搜索条件从服务器返回数据记录的,并使用了排序的处理方式,这里的queryParams参数就是提交到服务器端的参数了。

    //得到查询的参数
    queryParams : function (params) {
    //这里的键名和控制器的变量名必须一致,这边改动,控制器也需要改成一样的
         var temp = {
               rows: params.limit,                         //页面大小
               page: (params.offset / params.limit) + 1,   //页码
               sort: params.sort,      //排序列名
               sortOrder: params.order //排位命令(desc,asc)
         };
       return temp;
    },

    2.2、数据来源

    返回数据的URL地址接口是MVC控制器方法SelectWithPager,代码如下:

    /// <summary>
            /// 根据条件查询数据库,并返回对象集合(用于分页数据显示)
            /// </summary>
            /// <returns>指定对象的集合</returns>
            public override ActionResult SelectWithPager()
            {
                //检查用户是否有权限,否则抛出MyDenyAccessException异常
                base.CheckAuthorized(AuthorizeKey.ListKey);
    
                string where = GetPagerCondition();
                PagerInfo pagerInfo = GetPagerInfo();
                var sort = GetSortOrder();
    
                List<TestUserInfo> list = null;
                if (sort != null && !string.IsNullOrEmpty(sort.SortName))
                {
                    list = baseBLL.SelectWithPager(where, pagerInfo, sort.SortName, sort.IsDesc);
                }
                else
                {
                    list = baseBLL.SelectWithPager(where, pagerInfo);
                }
    
                //Json格式的要求{total:22,rows:{}}
                //构造成Json的格式传递
                var result = new { total = pagerInfo.RecordCount, rows = list };
                return ToJsonContent(result);
            }

    面代码处理了两个部分的对象信息,一个是分页实体类信息,一个是排序信息,然后根据这些条件获取记录,返回类似

    {total:22,rows:{}}

    格式的JSON数据记录。

    1 var result = new { total = pagerInfo.RecordCount, rows = list };
    2 return ToJsonContent(result);

    根据Request参数获取分页对象数据

    /// <summary>
            /// 根据Request参数获取分页对象数据
            /// </summary>
            /// <returns></returns>
            protected virtual PagerInfo GetPagerInfo()
            {
                int pageIndex = Request["page"] == null ? 1 : int.Parse(Request["page"]);
                int pageSize = Request["rows"] == null ? 10 : int.Parse(Request["rows"]);
    
                PagerInfo pagerInfo = new PagerInfo();
                pagerInfo.CurrenetPageIndex = pageIndex;
                pagerInfo.PageSize = pageSize;
    
                return pagerInfo;
            }

    获取排序参数信息

    /// <summary>
            /// 获取排序的信息
            /// </summary>
            /// <returns></returns>
            protected SortInfo GetSortOrder()
            {
                var name = Request["sort"];
                var order = Request["sortOrder"];
                return new SortInfo(name, order);
            }

     最后就是具体实现具体条件、具体页码、具体排序条件下的数据记录了,这部分可以根据自己的要求实现逻辑,这里只是给出一个封装好的处理调用即可。

    baseBLL.SelectWithPager(where, pagerInfo, sort.SortName, sort.IsDesc);

     实际情况,一般需要使用不同的条件进行数据查询,虽然Bootstrap-table控件提供了一个默认的查询按钮,不过一般是在客户端分页的情况下使用,而且略显简单,我们一般使用自己查询条件进行处理,如下界面所示。

    或者如下:

    那么这样对于上面的js属性就需要调整下接受查询条件参数queryParams 了

    //得到查询的参数
                    queryParams : function (params) {
                        //这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的
                        var temp = {
                            rows: params.limit,                         //页面大小
                            page: (params.offset / params.limit) + 1,   //页码
                            sort: params.sort,      //排序列名
                            sortOrder: params.order //排位命令(desc,asc)
                        };
                        return temp;
                    },

     对于自定义查询条件,我们可以用下面的常规方式增加参数,如下所示

    但是查询条件的参数我们不方便一一设置,我们想通过一种较为快捷的方式来处理,那么就需要对这个处理方式进行一个特别的修改了,首先添加一个扩展函数来处理表单的条件(参考博客http://www.cnblogs.com/zcsj/p/6635677.html的介绍)

    //自定义函数处理queryParams的批量增加
            $.fn.serializeJsonObject = function () {
                var json = {};
                var form = this.serializeArray();
                $.each(form, function () {
                    if (json[this.name]) {
                        if (!json[this.name].push) {
                            json[this.name] = [json[this.name]];
                        }
                        json[this.name].push();
                    } else {
                        json[this.name] = this.value || '';
                    }
                });
                return json;
            }

    然后我们就可以批量处理表单的查询条件了

    queryParams : function (params) {
                        //这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的
                        var temp = $("#ffSearch").serializeJsonObject();
                        temp["rows"] = params.limit;                        //页面大小
                        temp["page"] = (params.offset / params.limit) + 1;  //页码
                        temp["sort"] = params.sort;                         //排序列名
                        temp["sortOrder"] = params.order;                   //排位命令(desc,asc)
    
                        //特殊格式的条件处理
                        temp["WHC_Age"] = $("#WHC_Age").val() + "~" + $("#WHC_Age2").val();
                        temp["WHC_BirthDate"] = $("#WHC_BirthDate").val() + "~" + $("#WHC_BirthDate2").val();
    
                        return temp;
                    },

    然后后端统一按照逻辑处理查询参数即可。

  • 相关阅读:
    在SQLite中使用索引优化查询速度
    SQLite支持的SQL数据操作
    left (outer) join , right (outer) join, full (outer) join, (inner) join, cross join 区别
    深入理解Android内存管理原理(六)
    Merge Sorted Array
    Sort Colors
    Construct Binary Tree from Preorder and Inorder Traversal
    Binary Tree Postorder Traversal
    Symmetric Tree
    Rotate Image
  • 原文地址:https://www.cnblogs.com/wfy680/p/15538427.html
Copyright © 2011-2022 走看看