Bootstrap-Table實現自定義條件查詢

鑑於最近有人詢問Bootstrap-Table的自定義條件查詢如何實現,今天特在此說明。首先展示一下效果:

默認查詢

在這裏插入圖片描述

條件查詢

在這裏插入圖片描述

測試數據

在這裏插入圖片描述

前端代碼

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <link href="lib/bootstrap/css/bootstrap.min.css" rel="stylesheet" />
    <link href="lib/bootstrap-table/bootstrap-table.min.css" rel="stylesheet" />
    <script src="lib/bootstrap/js/jquery-1.9.1.min.js"></script>
    <script src="lib/bootstrap/js/bootstrap.min.js"></script>
    <script src="lib/bootstrap-table/bootstrap-table.min.js"></script>
    <script src="lib/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
</head>
<body>
    <div style="margin-left:200px;margin-top:100px;width:1000px;">
        <div class="panel panel-primary">
            <div class="panel-heading">
                <h3 class="panel-title">條件查詢</h3>
            </div>
            <div class="panel-body">
                <div style="display:inline-block;">
                    <div style="float:left;padding:6px;">
                        <span>姓名:</span>
                    </div>
                    <div style="float:left;">
                        <input id="name" class="form-control" style="width:200px;" placeholder="請輸入姓名" />
                    </div>
                    <div style="float:left;padding:6px;">
                        <span>性別:</span>
                    </div>
                    <div style="float:left;">
                        <select id="gender" class="form-control" style="width:200px;">
                            <option value="">請選擇</option>
                            <option value=""></option>
                            <option value=""></option>
                        </select>
                    </div>
                    <div style="float:left;margin-left:20px;">
                        <button id="query" class="btn btn-primary">查詢</button>
                    </div>
                </div>
            </div>
        </div>
        <table id="table"></table>
    </div>

    <script>
        $(document).ready(function () {

            // 初始化bootstrap-table
            $('#table').bootstrapTable({
                url: "ashx/GetRecordsHandler.ashx",                    // URL
                method: "post",                                        // 請求類型
                contentType: "application/x-www-form-urlencoded",      // post請求必須要有,否則後臺接受不到參數
                sidePagination: "server",                              // 設置在服務端還是客戶端分頁
                showRefresh: false,                                    // 是否刷新按鈕
                sortStable: true,                                      // 是否支持排序
                cache: false,                                          // 是否使用緩存
                pagination: true,                                      // 是否顯示分頁
                search: false,                                         // 是否有搜索框
                clickToSelect: true,                                   // 是否點擊選中行
                pageNumber: 1,                                         // 首頁頁碼,默認爲1
                pageSize: 5,                                           // 頁面數據條數
                pageList: [5, 10, 20, 30],
                queryParamsType: "",
                queryParams: function (params) {
                    return {
                        pageSize: params.pageSize,                     // 每頁記錄條數
                        pageNumber: params.pageNumber,                 // 當前頁索引
                        name: $('#name').val(),                        // 姓名
                        gender: $('#gender').val()                     // 性別
                    };
                },
                formatLoadingMessage: function () {
                    return "請稍後,正在加載....";
                },
                formatNoMatches: function () {
                    return "暫無匹配數據.";
                },
                columns: [{
                    field: "select",
                    title: "全選",
                    align: "center",
                    halign: "center",
                    checkbox: true,
                },
                {
                    field: 'Id',
                    title: '編號',
                    align: "center",
                    halign: "center",
                    sortable: true
                },
                {
                    field: 'Name',
                    title: '姓名',
                    align: "center",
                    halign: "center"
                },
                {
                    field: 'Gender',
                    title: '性別',
                    align: "center",
                    halign: "center"
                },
                {
                    field: 'Age',
                    title: '年齡',
                    align: "center",
                    halign: "center"
                }]
            })

            // 查詢按鈕
            $('#query').click(function () {
                $('#table').bootstrapTable('refresh')
            })
        });
    </script>
</body>
</html>

其實很簡單,在queryParams屬性裏綁定表單元素的值,最後刷新表格即可。

後臺代碼

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Web;
using Newtonsoft.Json;

namespace WebApplication1.ashx
{
    /// <summary>
    /// GetRecordsHandler 的摘要說明
    /// </summary>
    public class GetRecordsHandler : IHttpHandler
    {
        /// <summary>
        /// 連接字符串
        /// </summary>
        private static string ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";

            // 獲取分頁參數
            int pageSize = int.Parse(context.Request["pageSize"].ToString());
            int pageNumber = int.Parse(context.Request["pageNumber"].ToString());

            // 獲取自定義參數
            string name = context.Request["name"].ToString();
            string gender = context.Request["gender"].ToString();

            // 記錄總數
            int total = GetRecordsCount(name, gender);
            DataTable dataTable = GetRecords(pageSize, pageNumber, name, gender);

            // 格式化數據
            var data = new { total = total, rows = dataTable };
            context.Response.Write(JsonConvert.SerializeObject(data));
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }

        // 獲取記錄總數
        private int GetRecordsCount(string name, string gender)
        {
            // 查詢語句
            StringBuilder sql = new StringBuilder("select count(*) from [TPerson] ");
            if (!string.IsNullOrWhiteSpace(name) && !string.IsNullOrWhiteSpace(gender))
            {
                sql.Append("where Name=@Name and Gender=@Gender");
            }
            else if (!string.IsNullOrWhiteSpace(name) && string.IsNullOrWhiteSpace(gender))
            {
                sql.Append("where Name=@Name");
            }
            else if (string.IsNullOrWhiteSpace(name) && !string.IsNullOrWhiteSpace(gender))
            {
                sql.Append("where Gender=@Gender");
            }
            else
            {
                sql.Append("");
            }

            // 查詢參數
            List<SqlParameter> parameters = new List<SqlParameter>();
            if (!string.IsNullOrWhiteSpace(name))
            {
                parameters.Add(new SqlParameter("@Name", name));
            }
            if (!string.IsNullOrWhiteSpace(gender))
            {
                parameters.Add(new SqlParameter("@Gender", gender));
            }

            // 查詢總數
            using (SqlConnection connection = new SqlConnection(ConnectionString))
            {
                SqlCommand command = new SqlCommand(sql.ToString(), connection);
                if (parameters.Count > 0)
                {
                    command.Parameters.AddRange(parameters.ToArray());
                }
                try
                {
                    connection.Open();
                    return Convert.ToInt32(command.ExecuteScalar());
                }
                catch
                {
                    return -1;
                }
            }
        }

        // 分頁查詢數據
        private DataTable GetRecords(int pageSize, int pageNumber, string name, string gender)
        {
            // 查詢語句
            StringBuilder sql = new StringBuilder("select * from(select row_number() over(order by Id) as RowId, *from TPerson ");
            if (!string.IsNullOrWhiteSpace(name) && !string.IsNullOrWhiteSpace(gender))
            {
                sql.Append("where Name=@Name and Gender=@Gender) ");
            }
            else if (!string.IsNullOrWhiteSpace(name) && string.IsNullOrWhiteSpace(gender))
            {
                sql.Append("where Name=@Name) ");
            }
            else if (string.IsNullOrWhiteSpace(name) && !string.IsNullOrWhiteSpace(gender))
            {
                sql.Append("where Gender=@Gender) ");
            }
            else
            {
                sql.Append(") ");
            }
            sql.Append("as b where b.Id between (@pageNumber - 1) * @pageSize + 1 and @pageNumber * @pageSize order by Id");

            // 查詢參數
            List<SqlParameter> parameters = new List<SqlParameter>();
            parameters.Add(new SqlParameter("@pageSize", pageSize));
            parameters.Add(new SqlParameter("@pageNumber", pageNumber));
            if (!string.IsNullOrWhiteSpace(name))
            {
                parameters.Add(new SqlParameter("@Name", name));
            }
            if (!string.IsNullOrWhiteSpace(gender))
            {
                parameters.Add(new SqlParameter("@Gender", gender));
            }

            // 查詢數據
            DataTable dataTable = new DataTable();
            using (SqlDataAdapter adapter = new SqlDataAdapter(sql.ToString(), ConnectionString))
            {
                adapter.SelectCommand.Parameters.AddRange(parameters.ToArray());
                adapter.Fill(dataTable);
            }
            return dataTable;
        }
    }
}

到此爲止,Bootstrap-Table的自定義條件查詢就實現了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章