GVKun编程网logo

PHP笔记-表格及分页功能(php 分表)

16

关于PHP笔记-表格及分页功能和php分表的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于4k项目基于jquery写的表格及分页的插件、EasyUI多条件查询及分页功能、Flutter分页

关于PHP笔记-表格及分页功能php 分表的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于4k项目基于jquery写的表格及分页的插件、EasyUI 多条件查询及分页功能、Flutter 分页功能表格控件、hp笔记本电池价格及性能介绍等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

PHP笔记-表格及分页功能(php 分表)

PHP笔记-表格及分页功能(php 分表)

运行截图如下:

 

 

前端代码如下:

Student.PHP

<!DOCTYPE html>
<html lang="en">
<head>
    <Meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>HelloWorld</h1>
    <table border="1" cellspacing="1" cellpadding="1">
        <thead>
        <tr>
            <td>ID</td>
            <td>名字</td>
            <td>年龄</td>
            <td>性别</td>
            <td>邮箱</td>
            <td>地址</td>
            <td>更新时间</td>
        </tr>
        </thead>
        <tbody>
        {foreach $students as $student}
        <tr>
            <td>{$student.id}</td>
            <td>{$student.name}</td>
            <td>{$student.age}</td>
            <td>
                {if $student.sex eq "m"} 男
                {else}女
                {/if}
            </td>
            <td>{$student.email}</td>
            <td>{$student.address}</td>
            <td>{$student.updateTime}</td>
        </tr>
        {/foreach}
        </tbody>
    </table>
    <ul>
        {$pageStr}
    </ul>

</body>
</html>

后端关键代码

提供数据的:

StudentController.PHP

<?PHP

namespace admin\controller;
use core\Controller;
use home\model\StudentModel;
use vendor\Page;

class StudentController extends Controller{


    public function student(){

        $page = $_REQUEST["page"] ?? 1;
        $studentModel = new StudentModel();
        $students = $studentModel->getAllStudents($page);
        $counts = $studentModel->getCounts();

        $cond = array("a" => A, "c" => C, "p" => P);
        $pageStr = Page::clickPage(URL . "index.PHP", $counts, $cond, $page);

        $this->assign("pageStr", $pageStr);
        $this->assign("students", $students);
        $this->assign("counts", $counts);
        $this->display("student.html");
    }
}

分页代码:

Page.PHP

<?PHP
namespace vendor;

class Page{

    public static function clickPage($url, $counts, $cond = array(), $page = 1, $pageCount = 5): string{

        //所有页数
        $pages = ceil($counts / $pageCount);

        //上一页和下一页
        $prev = $page > 1 ? $page - 1 : 1;
        $next = $page < $pages ? $page + 1 : $pages;

        //url上需要补充的内容
        $patchInfo = "";
        foreach ($cond as $key => $value){

            $patchInfo .= $key . "=" . $value . "&";
        }

        //先展示上一页
        $click = "<li><a href='{$url}?{$patchInfo}page={$prev}'>上一页</a></li>";

        //如果总页数在7以内全都都展示出来
        if($pages <= 7){

            for($i = 1; $i <= $pages; $i++){

                $click .= "<li><a href='{$url}?{$patchInfo}page={$i}'>{$i}</a></li>";
            }
        }
        else{   //总页数在7页以上

            //如果当前选中页数在5页以内,就把前7页全显示了。
            if($page <= 5){

                for($i = 1; $i <= 7; $i++){

                    $click .= "<li><a href='{$url}?{$patchInfo}page={$i}'>{$i}</a></li>";
                }
                $click .= "<li><a href='#'>...</a></li>";
            }
            else{

                //如果当前选中的在第7页(包括第7页)以上,先展示1,2
                $click .= "<li><a href='{$url}?{$patchInfo}page=1'>1</a></li>";
                $click .= "<li><a href='{$url}?{$patchInfo}page=2'>2</a></li>";
                $click .= "<li><a href='#'>...</a></li>";

                //再展示中间页
                //如果是最后3页了,就全部展示出来
                if($pages - $page <= 3){

                    for($i = $pages - 4; $i <= $pages; $i++){

                        $click .= "<li><a href='{$url}?{$patchInfo}page={$i}'>{$i}</a></li>";
                    }
                }
                else{   //展示当前页面的前2页,和后2页

                    for($i = $page - 2; $i <= $page + 2; $i++){

                        $click .= "<li><a href='{$url}?{$patchInfo}page={$i}'>{$i}</a></li>";
                    }

                    $click .= "<li><a href='#'>...</a></li>";
                }
            }
        }

        //最后补一个下一页
        $click .= "<li><a href='{$url}?{$patchInfo}page={$next}'>下一页</a></li>";
        return $click;
    }
}

简单说下逻辑:

http://localhost:63343/IT1995Blog/public/index.PHP?a=student&c=Student&p=admin&page=2

这个page就是当前页,程序里面写死了是每页5条,a=student,c=Student,p=admin是程序里面的逻辑,这个是必须要加的。所以在Page中会补这个。

4k项目基于jquery写的表格及分页的插件

4k项目基于jquery写的表格及分页的插件

/****
 * 表格插件option。
 * insertId:ID, 必传,需要插入的ID,可以是遮罩,或者其他DIV
 * layer:[], 必传,表格的表头,以及数据取值的key值,仅支持最多2行的合并,列不限制,
 * layer:[{cellName: "网元名称",cellKey: "NAME"}, {cellName: "网元名称",cellKey: [{cellName: "网元名称",cellKey: "NAME"},...]},...]
 * params: {}, 必传,包含page等在内发送请求所需要的所有参数
 * rqUrl: url, 必传,请求的地址
 * fucBeforeRender: function, 请求数据完成时的回调,可以通过该函数将数据处理成需要的格式
 * style: {}, 插件生成的DOM最外层DIV的样式,style: {"width": "100%"}
 * navbar: ("simple","multi", "munual"), 顶部工具条,三选一或者不传,如果是munual,则手动配置HTML,需要与navbarHtml配合使用
 * navbarHtml:string, 传入HTML字符串形式, 手动HTML要实现关闭按钮,需要在关闭按钮上添加: [data-rby=''close''], 导出则添加:[data-rby=''export'']
 * subnav/subnavHtml: ("simple","multi", "munual"),子导航,用法同navbar/navbarHtml
 * toolbar/toolbarHtml: ("simple","multi", "munual") 底部工具条,用法同navbar/navbarHtml
 * title:string 表格的标题,在navbar = "simple" 或者 subnav = "multi" 或者 手动配置的HTML, 都可接受title
 ****/
function $4kTable(option) {
	this.option = option || {};
	this.option.cachedParams = $.extend(true, {}, this.option.params);
	//初始化
	this._init();
}

$4kTable.prototype = {
		constructor: $4kTable,
		_init: function() {
			//只初始化一次
			if(this.initialized) {
				return;
			}
			
			var $option = this.option;
			var $tableId = $option.insertId + "_table";
			
			var wrap;
			if($option.style && !$option.pageOnly) {
				for(var i in $option.style) {
					wrapStyle += i + ": " + $option.style[i] + ";";
				}
			}
			
			//生成表格所需的DOM拼接字符串
			var _html = "",
				_navbarHtml = "", 
			    _subnavHtml = "", 
			    _toolbarHtml = "";
			// 选择表格顶部工具条
			if(!$option.pageOnly) {
				_html += "<div class=table_outer id=" + $tableId.replace("#", "") + "" + wrapStyle + "''>";
				
				if($option.navbar == "multi") {
					_navbarHtml += ''<div>'' + 
						''<span>详细信息</span>'' +
						''<spandata-rby="close">+</span>'' +
				    ''</div>''
				} else if($option.navbar == "simple") {
					_navbarHtml += "<divtop_ctrl''>" +
						"<strong>" + (this.option.title || "") + "</strong>" +
						"<spanglyphicon glyphicon-remove pull-right close_btn'' data-rby=''close''></span>" +
						"<spanglyphicon glyphicon-download-alt pull-right'' data-rby=''export''></span>" +
					"</div>"
				} else if($option.navbar == "manual") {
					_navbarHtml += (this.option.navbarHtml || "");
				}
				_html += _navbarHtml + ''<div>'';
				
				//表格上部分工具条
				if($option.subnav == "multi") {
					_subnavHtml += "<divtable_subnav table_sub_style''>" +
						"<h3>" + (this.option.title || "") + "</h3>" +
						"<divtable_tick''>" +
							"<spanfloat-right table_export'' data-rby=''export''><spantable_export_icon''></span>" +
							"<span>导出</span></span>" +
						"</div>" +
					"</div>"
				} else if($option.subnav == "simple") {
					_subnavHtml += ''<div>'' + 
						''<span>当前不满足发展网元列表&nbsp;<b class=table_notes title="网元当前的可放号用户总数小于目标放号数,或者放号比例小于100%,说明网元当前的放号能力不能满足用户的发展。">?</b></span>'' +
						''<spandata-rby="export"><span></span><span>导出</span></span>'' +
					''</div>'';
				} else if($option.subnav == "manual") {
					_subnavHtml += (this.option.subnavHtml || "");
				}
				_html += _subnavHtml + ''<table data-rby="table">'' +
					''<thead></thead>'' +
					''<tbody></tbody>'' +
				''</table>'';
			}
			
			//是否需要分页相关工具条
			if($option.toolbar == "multi") {
				_toolbarHtml += ''<divdata-rby="toolbar">'' +
				''<div>'' +
					''<div><span>每页</span>'' +
						''<select><option>5</option><option>10</option><option>15</option></select><span>条</span>'' +
					''</div>'' +
					''<div>'' +
						''<span data-rby="first"><i></i></span>'' +
						''<span data-rby="pre"><i></i></span>'' +
						''<span data-rby="next"><i></i></span>'' +
						''<span data-rby="last"><i></i></span>'' +
						''<input type="number">'' +
						''<button>转至</button>''+
					''</div></div>'' +
				''<div>'' +
					''<spandata-rby="curPage"></span>/''+
					''<spandata-rby="totalPage"></span> 页'' +
					'' 共 <spandata-rby="totalCounts"></span> 条数据'' +
				''</div>'' +
			''</div>''
			} else if($option.toolbar == "simple") {
				_toolbarHtml += ''<divdata-rby="toolbar">'' +
				''<ul><li><spandata-rby="first"></span>'' +
					''<spandata-rby="pre"></span>'' +
				''</li>'' +
				''<li>第<input type="number"data-rby="curPage">页,'' +
              		''共<spandata-rby="totalPage"></span>页'' +
				''</li>'' +
				''<li><spandata-rby="next"></span>'' +
            		''<spandata-rby="last"></span>'' +
            	''</li>'' +
            	''<li>每页显示<select><option selected>5</option><option>10</option><option>15</option></select>条</li>'' +
            	''<li>,共<spandata-rby="totalCounts"></span>条</li>'' +
            ''</ul></div>''
			} else if($option.toolbar == "munual"){
				_toolbarHtml += (this.option.toolbarHtml || "");
			}
			
			//如果已经存在组件,移除操作
			if(!$option.pageOnly) {
				_html += _toolbarHtml + ''</div></div>'';
				if($($option.insertId).find($tableId).length) {
					$($option.insertId).find($tableId).remove();
				}
			} else {
				_html = _toolbarHtml;
				if($($option.insertId).find("[data-rby=''toolbar'']").length) {
					$($option.insertId).find("[data-rby=''toolbar'']").remove();
				}
			}
			
			var self = this;
			$($option.insertId).show();
			$($option.insertId).append(_html);
			
			if(!$option.pageOnly) {
				var $twrap = $($tableId);
				var $table = this.$table = $twrap.find("[data-rby=''table'']");
				var $toolbar = this.$toolbar = $twrap.find("[data-rby=''toolbar'']");
				
				this.$thead = $table.find("thead");
				this.$tbody = $table.find("tbody");
			} else {
				var $toolbar = this.$toolbar = $($option.insertId).find("[data-rby=''toolbar'']");
			}
			
			if(!$option.pageOnly) {
				//表格头部操作(关闭)
				$twrap.on("click", "[data-rby=''close'']", function() {
					$(self.option.insertId).hide();
					$twrap.remove();
				});
				
				//导出操作
				$twrap.on("click", "[data-rby=''export'']", function() {
					if(self.option.exportHandle && typeof(self.option.exportHandle) == "function") {
						self.option.exportHandle(self.option);
						return;
					}
					var url = self.option.rqUrl.replace(".action", "Export.action");
					var params = $.extend(true, {}, self.option.cachedParams);
					params["emulateJSON"] = true;
					delete params["jqGridPageStr"];
					delete params["page"];
					delete params["rows"];
					$(".ajaxLoading").show();
					$.post(url, params, function(res) {
						$(".ajaxLoading").hide();
						download_user_defined_file(res.filePath);
					});
				});
				
				//添加表格头部信息,初始化的时候传入
				if(this.option.layer) {
					var theadHtml = this.createTableHeadHtml();
					this.$thead.append(theadHtml);
				}
			}
			
			//表格底部工具栏操作(每页显示条数, 分页控制, 页面选择, 行,页数显示)
			var $scounts = this.$scounts = $toolbar.find("select");
			var $first = this.$first = $toolbar.find("[data-rby=''first'']");
			var $pre = this.$pre = $toolbar.find("[data-rby=''pre'']");
			var $next = this.$next = $toolbar.find("[data-rby=''next'']");
			var $last = this.$last = $toolbar.find("[data-rby=''last'']");
			var $spage = $toolbar.find("button");
			var $inputPage = this.$inputPage = $toolbar.find("input");
			
			$scounts.on("change", function() {
				self.option.rows = $(this)[0].value;
				self.option.current = 1;
				self.refresh();
			});
			
			$first.on("click", function() {
				if(self.option.current == 1) {
					return;
				}
				self.option.current = 1;
				self.refresh();
			});
			
			$pre.on("click", function() {
				if(self.option.current <= 1) {
					return;
				}
				self.option.current--;
				self.refresh();
			});
			
			$next.on("click", function() {
				if(self.option.current >= self.option.total) {
					return;
				}
				self.option.current++;
				self.refresh();
			});
			
			$last.on("click", function() {
				if(self.option.current >= self.option.total) {
					return;
				}
				self.option.current = self.option.total;
				self.refresh();
			});
			
			$spage.on("click", function() {
				$pageAsset(self);
				self.refresh();
			});
			
			$inputPage.on("keyup", function(e) {
				var format = $(this).val().trim().replace(/\.|\+|\-/g, "");
				self.$inputPage[0].value = format;
				if(e.keyCode === 13) {
					$pageAsset(self);
					self.refresh();
				}
			});
			
			function $pageAsset(self) {
				var inputs = self.$inputPage.val().trim();
				if(typeof(inputs - 0) == "number" && !isNaN(inputs - 0)) {
					if(inputs < self.option.total && inputs > 1) {
						self.option.current = inputs;
					}
					if(inputs >= self.option.total) {
						self.option.current = self.option.total;
					}
					//空值,或者负数,或者undefined,null
					if(inputs <= 1) {
						self.option.current = 1;
					}
				} else {
					return;
				}
			}
			
			if(this.$thead) {
				this.$thead.find("th").on("click", "i", function() {
					if($(this).hasClass("disabled")) return;
					var order;
					var index = $(this).index();
					if(index === 0) {
						order = "asc";
					} else if(index === 1) {
						order = "desc";
					}
					self.option.sidx = $(this).parent().parent().index();
					self.option.sord = order;
					self.refresh();
				});
			}
			
			this.refresh();
			this.initialized = true;//完成初始化
		},
		//生成表格头部字符串
		createTableHeadHtml: function(layer) {
			this.tbodyKey = [];
			var theadHtml = "", headRows1 = "", headRows2 = "", $headCell = layer || this.option.layer;
			if($headCell) {
				//检查表格是否有单元格需要合并
				var needsMergeCell = $headCell.every(function(item, index) {
					return typeof(item.cellKey) == "string";
				});
				
				if(needsMergeCell) {
					for(var k = 0; k < $headCell.length; k++) {
						//判断是否需要排序,只支持单行,没有表格合并的类型。
						if(this.option.order && $headCell[k].orderString) {
							headRows1 += "<thheight:" + ($headCell[k].height || 30) + "px;white-space:nowrap''>" + $headCell[k].cellName + 
							"<spanorderWrap''><iicon-caret-up''></i><iicon-caret-down''></i></span>" + "</th>";
						} else {
							headRows1 += "<thheight:" + ($headCell[k].height || 30) + "px''>" + $headCell[k].cellName + "</th>";
						}
						this.tbodyKey.push($headCell[k].cellKey);
					}
				} else {
					for(var k = 0; k < $headCell.length; k++) {
						if(typeof($headCell[k].cellKey) == "string") {
							headRows1 += "<th rowspan=''2''" +  " style=height:" + ($headCell[k].height || 30) + "px>" + $headCell[k].cellName + "</th>";
							this.tbodyKey.push($headCell[k].cellKey);
						}
						if(typeof($headCell[k].cellKey) == "object") {
							headRows1 += "''<th colspan=" + $headCell[k].cellKey.length + " style=height:" + ($headCell[k].height || 30) + "px>" + $headCell[k].cellName + "</th>";
							for(var i = 0; i < $headCell[k].cellKey.length; i++) {
								headRows2 += "<th style=height:" + ($headCell[k].height || 30) + "px>" + $headCell[k].cellKey[i].cellName + "</th>";
								this.tbodyKey.push($headCell[k].cellKey[i].cellKey);
							}
						}
					}
				}
				theadHtml += "<tr>" + headRows1 + "</tr>" + "<tr>" + headRows2 + "</tr>";
			}
			return theadHtml;
		},
		
		refresh: function() {
			var _pages = {};
			var _params = this.option.cachedParams; 
			
			_pages["page"] = this.option.current || this.option.params.page;
			_pages["rows"] = this.option.rows || this.$scounts[0].value || this.option.params.rows;
			
			_params["page"] = this.option.current || this.option.params.page;
			_params["rows"] = this.option.rows || this.$scounts[0].value || this.option.params.rows;
			//在order与所需排序参数均齐全的情况下才添加排序参数
			if(this.option.order) {
				if(this.option.sidx) { // && this.option.sidx !== 0, 目前需求没有首列排序,暂时不判断
					_pages["sidx"] = this.option.layer[this.option.sidx].orderString;
				}
				if(this.option.sord) {
					_pages["sord"] = this.option.sord;
				}
			}
			
			_params["jqGridPageStr"] = JSON.stringify(_pages);
			_params["emulateJSON"] = true;
			this.ajaxData(_params);
		},
		ajaxData: function(params) {
			var self = this;
			$(".ajaxLoading").show();
			$.ajax({
				url: this.option.rqUrl,
				type: "POST",
				data: params, 
				success: function(response) {
					$(".ajaxLoading").hide();
					var res;
					//处理数据为需要的格式,先返回给外界处理,处理完成后再返回来插件内。
					if(typeof(self.option.fucBeforeRender) == "function") {
						res = self.option.fucBeforeRender(response, self);
					} else if(response && response.results) {
						res = response;
					}
					self.render(res);
				},
				error: function(response) {
					$(".ajaxLoading").hide();
					$4kDialogNotes();
				}
			});
		},
		render: function(res) {
			if(!res) return;
			var orderIndex, shouldActivedCell;
			
			this.$inputPage[0].value = this.option.current = res.page;
			this.option.records = res.records;
			this.option.total = res.total;
			this.option.rows = res.rows;
			this.$toolbar.find("[data-rby=''curPage'']").text(res.page);
			this.$toolbar.find("[data-rby=''totalPage'']").text(res.total);
			this.$toolbar.find("[data-rby=''totalCounts'']").text(res.records);
			
			if(this.option.current <= 1) {
				this.$first.addClass("disabled");
				this.$pre.addClass("disabled");
			} else {
				if(this.$first.hasClass("disabled")) {
					this.$first.removeClass("disabled");
				}
				if(this.$pre.hasClass("disabled")) {
					this.$pre.removeClass("disabled");
				}
			}
			if(this.option.current >= this.option.total) {
				this.$last.addClass("disabled");
				this.$next.addClass("disabled");
			} else {
				if(this.$last.hasClass("disabled")) {
					this.$last.removeClass("disabled");
				}
				if(this.$next.hasClass("disabled")) {
					this.$next.removeClass("disabled");
				}
			}
			
			if(!this.initTableHead && !this.option.layer && res.$4kLayer) {
				this.$thead.append(this.createTableHeadHtml(res.$4kLayer));
				this.initTableHead = true;
			}
			
			if(!this.option.pageOnly) {
				var tdList = res.results;
				var newTr = "";
				for(var i = 0, len = tdList.length; i < len; i++) {
					newTr += this.rendAsset(tdList[i]);
				}
				this.$tbody.empty().append(newTr);
			}
			//判断点击的是哪个排序,将该排序按钮置为相应状态 //同样的, 无首列排序,暂时不判断sidx为0的情况
			if(this.option.sidx && this.option.sord) {
				this.$thead.find("i").removeClass("disabled");
				shouldActivedCell = this.$thead.find("th").eq(this.option.sidx);
				if(this.option.sord == "asc") {
					shouldActivedCell.find("i").eq(0).addClass("disabled");
				}
				if(this.option.sord == "desc") {
					shouldActivedCell.find("i").eq(1).addClass("disabled");
				}
			}
		},
		rendAsset: function(obj) {
			var pref = "<td>", arts = "</td>", tds = "<tr>", rate;
			if(typeof(obj) !== "object") return;
			var tempData;
			for(var i = 0; i < this.tbodyKey.length; i++) {
				tempData = obj[this.tbodyKey[i]];
				if(obj[this.tbodyKey[i]]) {
					tds += pref + tempData + arts;
				} else {
					if(tempData === "0" || tempData === 0) {
						tds += pref + tempData + arts;
					} else {
						tds += pref + "-" + arts;
					}
				}
				
			}
			tds += "</tr>";
			return tds;
		}
}

 

EasyUI 多条件查询及分页功能

EasyUI 多条件查询及分页功能

效果图

在这里插入图片描述
body

<div id="search" region="north" split="true" style="width: 100%;height:100px;padding-top: 15px;padding-left: 10px" title="查询">
	<span>填报单位:</span>
	<input id="tbdw" style="line-height:26px;border:1px solid #ccc">
	<span>宣传日期起:</span>
	<input id="xcrqBegin" class="easyui-datebox" data-options="formatter:myformatter,parser:myparser" style="line-height:26px;border:1px solid #ccc">
	<span>宣传日期止:</span>
	<input id="xcrqEnd" class="easyui-datebox" data-options="formatter:myformatter,parser:myparser" style="line-height:26px;border:1px solid #ccc">
	<a href="#" class="easyui-linkbutton" data-options="iconCls:''icon-search''" plain="true" onclick="doSearch()">查询</a>
	<a href="#" class="easyui-linkbutton" data-options="iconCls:''icon-reload''" plain="true" onclick="refresh()">重置</a>
</div>

script

 $(function () {
        $("#xcpxList").datagrid({
            title:"用户信息列表",
            url:"/xcpx/getAll",
            method:"POST",
            pagination:true,
            pageSize:10,
            pageList:[10,20,30],
            rownumbers:true,
            singleSelect:true,
            fit:true,
            striped : true,
            border:false,
            idField:"id",
			toolbar:"#toolbar",
            fitColumns:true, //去除滚动条
            columns:[[
                {field:''id'',title:''序号'',width:40,hidden:false,align:''center''},
                {field:''tbdwDm'',title:''单位'',width:100,align:''center''},
                {field:''xcrq'',title:''日期'',width:100,align:''center''},
                {field:''ztqd'',title:''发布载体或渠道'',width:80,align:''center''},
                {field:''xcnr'',title:''宣传内容或标题'',width:100,align:''center''},
                {field:''llrcXx'',title:''浏览(涉及)人次-线下'',width:100,align:''center''},
                {field:''llrcXs'',title:''浏览(涉及)人次-线上'',width:100,align:''center''},
                {field:''fbsl'',title:''发布(张贴)数量'',width:100,align:''center''},
                {field:''xcxsXl'',title:''宣传形式小类'',width:100,align:''center''},
                {field:''xcxsZl'',title:''宣传形式中类'',width:100,align:''center''},
                {field:''xcxsDl'',title:''宣传形式大类'',width:100,align:''center''},
                {field:''bz'',title:''备注'',width:100,align:''center''},
                {field:''lrrDm'',title:''录入人'',width:85,align:''center''},
                {field:''lrrq'',title:''录入日期'',width:80,align:''center''},
                {field:''handle'',title:''操作'',width:150,align:''center'',formatter:formatOper}
            ]]
        })
    });

//查询
	function doSearch() {
		    $("#xcpxList").datagrid(''load'',{
		        tbdwDm:$("#tbdw").val(),
				xcrqBegin:$("#xcrqBegin").val(),
				xcrqEnd:$("#xcrqEnd").val(),
				handle:"search"     //这是一个标记,传到后台做判断的
			});
    }
    //重置按钮
function refresh() {
		$("#tbdw").val('''');
        $("#xcrqBegin").datebox(''setValue'', '''');
        $("#xcrqEnd").datebox(''setValue'', '''');

    }
//时间控件格式化
    function myformatter(date){
        var y = date.getFullYear();
        var m = date.getMonth()+1;
        var d = date.getDate();
        return y+''-''+(m<10?(''0''+m):m)+''-''+(d<10?(''0''+d):d);
    }
    function myparser(s){
        if (!s) return new Date();
        var ss = (s.split(''-''));
        var y = parseInt(ss[0],10);
        var m = parseInt(ss[1],10);
        var d = parseInt(ss[2],10);
        if (!isNaN(y) && !isNaN(m) && !isNaN(d)){
            return new Date(y,m-1,d);
        } else {
            return new Date();
        }
    }

controller

 @ResponseBody
    @RequestMapping("/getAll")
    public Map<String,Object> getAll(String tbdwDm,String xcrqBegin,String xcrqEnd,String handle,Integer page, Integer rows, HttpServletResponse response, HttpServletRequest request){
        Map<String,Object> map = new HashMap<String,Object>();
        if(handle != null){  //前端传过来的标识做个判断
            List<GshsXcpxtzPxmx> gshsXcpxtzPxmxList = gshsXcpxtzPxmxService.findByTbdwdmOrXcrq(tbdwDm,xcrqBegin,xcrqEnd,page,rows);
            map.put("rows",gshsXcpxtzPxmxList);
            map.put("total",rows);
        }else {
            List<GshsXcpxtzPxmx> gshsXcpxtzPxmxList = gshsXcpxtzPxmxService.getAll(page,rows);
            int total =gshsXcpxtzPxmxService.getCount();
            map.put("rows",gshsXcpxtzPxmxList);
            map.put("total",total);
        }

        return map;
    }

service

    List<GshsXcpxtzPxmx> findByTbdwdmOrXcrq(String tbdwDm, String xcrqBegin, String xcrqEnd, Integer page, Integer rows);

    List<GshsXcpxtzPxmx> getAll(Integer page, Integer rows);
    
	int getCount();

impl

 @Override
    public List<GshsXcpxtzPxmx> findByTbdwdmOrXcrq(String tbdwDm, String xcrqBegin, String xcrqEnd, Integer page, Integer rows) {
        if(page==null || page<=0){
            page = 0;
        }else{
            page = (page - 1)*rows;
        }
            return gshsXcpxtzPxmxDao.findByTbdwdmOrXcrq(tbdwDm,xcrqBegin,xcrqEnd,page,rows);
    }

@Override
    public List<GshsXcpxtzPxmx> getAll(Integer page,Integer rows) {

        if(page==null || page<=0){
            page = 0;
        }else{
            page = (page - 1)*rows;
        }
//        Pageable pageable = PageRequest.of(page,rows);
        return gshsXcpxtzPxmxDao.getAll(page,rows);
    }

@Override
    public int getCount() {
        return gshsXcpxtzPxmxDao.getCount();
    }

dao

   @Query(name = "getAll",nativeQuery = true,value =
            "SELECT * FROM t86_gshs_xcpxtz_pxmx a WHERE a.del_flag = 0 LIMIT :page,:rows ")
    List<GshsXcpxtzPxmx> getAll(@Param("page") Integer page, @Param("rows") Integer rows);

    @Query(name = "getCount",nativeQuery = true,value =
            "SELECT count(1) FROM t86_gshs_xcpxtz_pxmx a WHERE a.del_flag = 0")
    int getCount();

    @Query(name = "findByTbdwdmOrXcrq",nativeQuery = true,value =
    "SELECT * FROM t86_gshs_xcpxtz_pxmx a WHERE if(:tbdwDm != '''',tbdw_dm = :tbdwDm,1 = 1) AND if(:xcrqBegin != '''',xcrq >= :xcrqBegin,2 = 2) AND if(:xcrqEnd != '''',xcrq <= :xcrqEnd,3 = 3) LIMIT :page,:rows")
    List<GshsXcpxtzPxmx> findByTbdwdmOrXcrq(@Param("tbdwDm") String tbdwDm, @Param("xcrqBegin") String xcrqBegin,@Param("xcrqEnd") String xcrqEnd,@Param("page") Integer page,@Param("rows")Integer rows);

Flutter 分页功能表格控件

Flutter 分页功能表格控件

老孟导读:前2天有读者问到是否有带分页功能的表格控件,今天分页功能的表格控件详细解析来来。

PaginatedDataTable

PaginatedDataTable是一个带分页功能的DataTable,生成一批数据,项目中此一般通过服务器获取,定义model类:

class User {
  User(this.name, this.age, this.sex);

  final String name;
  final int age;
  final String sex;
}

生成数据:

List<User> _data = [];

@override
  void initState() {
    List.generate(100, (index) {
      _data.add(User(''老孟$index'', index % 50, index % 2 == 0 ? ''男'' : ''女''));
    });
    super.initState();
  }

PaginatedDataTable的基础用法如下:

PaginatedDataTable(
  header: Text(''header''),
  columns: [
    DataColumn(label: Text(''姓名'')),
    DataColumn(label: Text(''性别'')),
    DataColumn(label: Text(''年龄'')),
  ],
  source: MyDataTableSource(_data),
)

header表示表格顶部控件。

columns表示每一列的列头控件。

source表示数据源,需要继承DataTableSource,用法如下:

class MyDataTableSource extends DataTableSource {
  MyDataTableSource(this.data);

  final List<User> data;

  @override
  DataRow getRow(int index) {
    if (index >= data.length) {
      return null;
    }
    return DataRow.byIndex(
      index: index,
      cells: [
        DataCell(Text(''${data[index].name}'')),
        DataCell(Text(''${data[index].sex}'')),
        DataCell(Text(''${data[index].age}'')),
      ],
    );
  }

  @override
  int get selectedRowCount {
    return 0;
  }

  @override
  bool get isRowCountApproximate {
    return false;
  }

  @override
  int get rowCount {
    return data.length;
  }
}

效果如下:

getRow是根据index获取每一行的数据,通常使用DataRow.byIndex返回数据,cells表示每一个表格的数据,cells的数量需要与PaginatedDataTable中columns数量保持一致。

selectedRowCount是选中的行数,注意这里不是索引,是总共选中的行数。

isRowCountApproximate:如果isRowCountApproximate设置为true,行数将会无尽大,所以正常情况下isRowCountApproximate设置为false。

rowCount表示行数,如果isRowCountApproximate设置为true,此属性无效。

设置actions,显示在header的右端,用法如下:

PaginatedDataTable(
  header: Text(''header''),
  actions: <Widget>[
    IconButton(icon: Icon(Icons.add),onPressed: (){},),
    IconButton(icon: Icon(Icons.delete),onPressed: (){},),
  ],
  ...
)

效果如下:

rowsPerPage表示每页显示的行数,默认10行,设置5行如下:

PaginatedDataTable(
  rowsPerPage: 5,
  ...
)

onRowsPerPageChanged不为null时,在左下角出现每页显示多少行数的选项,用法如下:

var _rowsPerPage = 5;
PaginatedDataTable(
  onRowsPerPageChanged: (v) {
    setState(() {
      _rowsPerPage = v;
    });
  },
  availableRowsPerPage: [5,10,15,16],
  rowsPerPage: _rowsPerPage,
  ...
)

效果如下:

点击出现availableRowsPerPage设置的数组,onRowsPerPageChanged为选择其中一项后回调,用于更新rowsPerPage属性。

显示的数据过多时,需要将PaginatedDataTable包裹在SingleChildScrollView中,滚动显示数据:

SingleChildScrollView(
  child: PaginatedDataTable()
)

onPageChanged是翻页时回调,返回当前页第一条数据的索引:

PaginatedDataTable(
  onPageChanged: (page){
    print(''onPageChanged:$page'');
  },

打印数据为:

flutter: onPageChanged:10
flutter: onPageChanged:20
flutter: onPageChanged:30
flutter: onPageChanged:40

排序

生序降序设置:

PaginatedDataTable(
  sortColumnIndex: 1,
  sortAscending: false,
  ...
)

效果如下:

生序降序的设置仅仅显示相应图标,数据并不会实际排序,对数据进行排序可以当用户点击表头时对数据按照本列数据进行排序,用法如下,

var _sortAscending = true;

_buildPaginatedDataTable() {
  return PaginatedDataTable(
    header: Text(''header''),
    sortColumnIndex: 2,
    sortAscending: _sortAscending,
    columns: [
      DataColumn(label: Text(''姓名'')),
      DataColumn(label: Text(''性别'')),
      DataColumn(
          label: Text(''年龄''),
          onSort: (index, sortAscending) {
            setState(() {
              _sortAscending = sortAscending;
              if (sortAscending) {
                _data.sort((a, b) => a.age.compareTo(b.age));
              } else {
                _data.sort((a, b) => b.age.compareTo(a.age));
              }
            });
          }),
    ],
    source: MyDataTableSource(_data),
  );
}

效果如下:

选中

可以在每一行的前面添加复选框,表示当前行是否选中,在User中添加是否选中属性,用法如下:

class User {
  User(this.name, this.age, this.sex, {this.selected = false});

  final String name;
  final int age;
  final String sex;
  bool selected;
}

添加勾选框:

@override
DataRow getRow(int index) {
  if (index >= data.length) {
    return null;
  }
  return DataRow.byIndex(
    index: index,
    selected: data[index].selected,
    onSelectChanged: (selected) {
      data[index].selected = selected;
      notifyListeners();
    },
    cells: [
      DataCell(
        Text(''${data[index].name}''),
      ),
      DataCell(Text(''${data[index].sex}'')),
      DataCell(Text(''${data[index].age}'')),
    ],
  );
}

效果如下:

全选控制:

PaginatedDataTable(
  header: Text(''header''),
  onSelectAll: (all) {
    setState(() {
      _data.forEach((f){
        f.selected = all;
      });
    });
  },

处理数据显示不全问题

当表格列比较多的时候,使用SingleChildScrollView包裹,显示不全时滚动显示,用法如下:

SingleChildScrollView(
  scrollDirection: Axis.horizontal,
  child: PaginatedDataTable()
)

效果如下:

交流

老孟Flutter博客地址(近200个控件用法):http://laomengit.com

欢迎加入Flutter交流群(微信:laomengit)、关注公众号【老孟Flutter】:

hp笔记本电池价格及性能介绍

hp笔记本电池价格及性能介绍

惠普 笔记本电脑 在长时间使用过程之后,就会出现电池的性能下降,这时候大家就需要进行重新的更换电池了,那么接下来小编为大家介绍几款惠普笔记本电脑的电池,供大家在购买的时候参考使用。

一、惠普h4q47aa四芯长效电池:

这款惠普电池的电池类型是锂离子电池,它的总重量可以达到335克,其外形长度是133×207×80毫米。这块电池就其总体来说,它是非常不错的,但是价格是稍微比较贵的。这款惠普笔记本电脑的电池价格大概是900元左右,因此很多普通的笔记本电脑使用者是,不建议大家购买这样的电池的。

二、Bay惠普六芯笔记本电池:

这款惠普电池采用abs加PC合金材料制作的微课,其内部采用超s级的电芯,所以说这块电池的是精雕细琢,其电池的总重量可以达到308克,产品尺寸是204×47×21毫米,其电池的总容量可以达到4400毫安。这款惠普电池自从2010年到2015年期间,就一直在笔记本市场当中占据非常高的地位,而前期采用多重的流程进行严格的把控,因此电池的使用是非常安全的,同时,采用精度的覆膜设计,可以做到1:1的比例模型复制打造,与原装电池丝豪没有任何的差别。而且具有非常高的兼容性,其内部的 电路板 是采用t i的原厂电路保护设计,因此非常的高效安全,禁得住市场的考验,而且这款电池的价格也比较低,一般只有80元左右。

三、E能之星5200惠普笔记本电池:

这块电池采用最为先进的电芯匹配程序筛选,能够保证所有的点心都是一致性的,而且公司经过10年的电池研发和生产技术,其安全性能是非常有保证的。这款惠普电池拥有比普通电池续航更加强劲,持久耐用的,完美品质,而且内部采用独创的智能控制芯片,可以有效的保证产品的自动充放电。它可以在屏幕亮度非常高的情况下,持续续航2到3个小时左右。这款惠普电池的价格大概是250元左右。

关于这几款惠普笔记本电脑电池的价格小编就介绍到这里,通过小编以上的介绍我想大家应该有一个想到大致的了解了吧,希望大家能够在日常生活中选购到适合自己的笔记本电池。

我们今天的关于PHP笔记-表格及分页功能php 分表的分享就到这里,谢谢您的阅读,如果想了解更多关于4k项目基于jquery写的表格及分页的插件、EasyUI 多条件查询及分页功能、Flutter 分页功能表格控件、hp笔记本电池价格及性能介绍的相关信息,可以在本站进行搜索。

本文标签: