咱们在使用easyui表格的时候,感觉是非常方便的。咱们选中页数,选中刷新图标,上一页下一页都非常好用,并且自动显示从多少条到多少条。
整个语句在controlers层中是这样写的。
其中d层有这么一句话。
//list = list.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
其实这个list在刚刚赋值的时候是把数据库符合的信息都查出来了。就是没有加条数的信息,可以说把所有的数据都搜出来了,只是在全部查出来又做了一个筛选。
这个怎么写呢?
拿mysql语句做一个例子。
public List<VM_BorrowlogGroup> FrmLoad(VM_BorrowlogGroup QGroup, int pageSize, int pageIndex, out int total)
{
int begin = (pageIndex - 1) * pageSize;
string sql = "select COUNT(*) from (SELECT v.mail,applicateName,opName,i.itemName,s.storageName,v.positionID,v.number,v.lendingDate,v.lendingTime,v.returnDate,v.returnTime,v.remark,v.isDel,v.itemNo,v.purpose,v.status,v.op from (SELECT a.username as applicateName,t.userName AS opName,b.itemNo,b.storageID,b.positionID,b.number,b.lendingDate,b.lendingTime,b.returnDate,b.returnTime,b.remark,b.purpose,b.status, b.isDel, b.op,a.mail FROM (SELECT * FROM T_User) AS a RIGHT JOIN T_BorrowLog b ON a.userid = b.applicant LEFT JOIN T_User t ON t.userID = b.op)v LEFT JOIN T_Item i on v.itemNo=i.itemNo LEFT JOIN T_Storage s on v.storageID=s.storageID)as aa where op=@op LIMIT " + begin + "," + pageSize + "";
关键在于 LIMIT " + begin + "," + pageSize + ""; 这是求begin+1这条语句和下面的pagesize条语句。
可以写成这样 LIMIT 3,5"; 这样的意思就是说从第4条开始算取出5条记录,也就是3,4,5,6,7这几条语句求出来。
这样咱们就做出了真分页,单咱们还需要求出total也就总的数量这个就好算了。
string sql = "select COUNT(*) from (SELECT v.mail,applicateName,opName,i.itemName,s.storageName,v.positionID,v.number,v.lendingDate,v.lendingTime,v.returnDate,v.returnTime,v.remark,v.isDel,v.itemNo,v.purpose,v.status,v.op from (SELECT a.username as applicateName,t.userName AS opName,b.itemNo,b.storageID,b.positionID,b.number,b.lendingDate,b.lendingTime,b.returnDate,b.returnTime,b.remark,b.purpose,b.status, b.isDel, b.op,a.mail FROM (SELECT * FROM T_User) AS a RIGHT JOIN T_BorrowLog b ON a.userid = b.applicant LEFT JOIN T_User t ON t.userID = b.op)v LEFT JOIN T_Item i on v.itemNo=i.itemNo LEFT JOIN T_Storage s on v.storageID=s.storageID)as aa where op=@op";
PS:在说一下SQLserver中的语句。
select top 10 * from A where id not in (select top 30 id from A)
这句话的意思就是先求出前30条,然后在把这30条去掉。在取10条,这样就算出了31到40条。如果咱们有serial列的话可以把id换成series就可以。
感谢大家的建议。