请选择 进入手机版 | 继续访问电脑版

 找回密码
 立即注册
查看: 4195|回复: 3

carl分页控件pagectrl的演示

[复制链接]

9

主题

34

帖子

63

积分
交易币
4

版主

Rank: 7Rank: 7Rank: 7

发表于 2015-5-30 12:54:55 | 显示全部楼层 |阅读模式
本帖最后由 wznjsy 于 2015-5-30 12:59 编辑

这里用SQLITE 建立一个数据库来演示分页控件的数据。 SQLITE 的查询语句和MYSQL 的是一样的,所以构建查询语句的时候直接用carl.sql.my.getPageSql来建立的。分页控件的使用代码是从carl.ctrl.page改过来的。

直接看代码吧。

[aardio] 纯文本查看 复制代码
import win.ui;
import carl.ctrl.listviewex
import carl.ctrl.pagectrl;
import carl.sql;
/*DSG{{*/
var winform = ..win.form(text="listview扩展控件演示";right=599;bottom=452)
winform.add(
lvEx={cls="listviewex";text="listview扩展控件";left=16;top=12;right=583;bottom=372;edge=1;transparent=1;z=1};
pagectrl={cls="pagectrl";text="分页控件";left=9;top=386;right=590;bottom=427;edge=1;transparent=1;z=2}
)
/*}}*/

import console;

//listview扩展控件是根据数据库返回的数据集结构设计的

io.open();
   
winform.listview = winform.lvEx.listview;//listview原始控件
winform.listview.onnotify = function(id,code,ptr){
   return winform.lvEx.openonnotify(id,code,ptr);//开启消息回调,默认启用排序,右键菜单等功能
}
 
//添加表头,key键值,name列名显示名称,len宽度 为0,表示隐藏
winform.lvEx.addHead(
{	
	{key="rowId"; name="序号"; len=50};
    {key="title"; name="标题"; len=50};
    {key="length"; name="长度"; len=80};
    {key="year"; name="时间"; len=80};
    {key="starring"; name="主演"; len=100};
}
)
 
import sqlite


db = sqlite("/test-sqlite.db")

//创建表 
if( not db.existsTable("film") ){  
	db.exec( "CREATE TABLE [film](title, length, year, starring);")  
	db.beginTrans();
	for(i=1;20;1){
		var command = db.prepare("REPLACE INTO film VALUES (@title,@length,@year, 'Jodie Foster');" ) 
		command.step(  
			title = "标题";
			length = i;
			year = time.now();
		)    	
	
	}
	db.commitTrans();
	
}  



winform.basic_sql = "SELECT title, length, year, starring FROM film";
winform.orderby = "length";
winform.isPage = true;

executeSql = function(currentPage, pageSize){
	winform.lvEx.clearRow();

	if( ! winform.basic_sql ){
		winform.msgboxErr("请设置page控件SQL语句","提示")
		return ; 
	}
	var where = "";
	if( type(winform.where) == "function" ){//自定义查询语句
		where = winform.where();
	}
	if(where === false) return false;
	where = #where ? "where " + where : "";
	var sql;
	if(winform.isPage){
		var drive = winform.drive : ..config[["__drive"]] : "mysql";
		sql = (drive == "mysql") ?
		..carl.sql.my.getPageSql(winform.basic_sql + " " + where, currentPage, pageSize, winform.orderby) :
		..carl.sql.ms.getPageSql(winform.basic_sql + " " + where, currentPage, pageSize, winform.orderby);	
	}else {
		sql = winform.basic_sql ++ " " ++ where;
		if(#winform.orderby) sql += " order by " ++ winform.orderby;
	}
	winform.lastSql = sql;
	tab,err = db.getTable(sql);
 
	if( !tab ){
		winform.msgbox(err,"提示")
		return ;
	}
	if( #tab ){
		if( winform.isPage ){
			winform.pagectrl.totalCount = tab[1]["rowCount"];//总记录
		}else {
			winform.pagectrl.pageSize = #tab
			winform.pagectrl.totalCount = #tab;
		}
		winform.lvEx.showData(tab, currentPage, pageSize)
	}else {
		winform.pagectrl.totalCount = "0";
	}	
}

 
 
winform.pagectrl.listview(winform.lvEx.listview);

winform.pagectrl.pageSize = 5;
winform.pagectrl.showPage = function(){//分页绑定函数
	if( ShowPageStatus ){return ; }
	winform.ShowPageStatus = true;
	try{
		executeSql(winform.pagectrl.nowPage, winform.pagectrl.pageSize);
	}
	catch(e){
		..io.print(e)
	}			
	ShowPageStatus = null; 	
}
winform.pagectrl.load();

winform.show()
win.loopMessage()
回复

使用道具 举报

19

主题

124

帖子

249

积分
交易币
0

编程二段

Rank: 3Rank: 3

发表于 2015-5-30 17:06:54 | 显示全部楼层
谢谢分享,待会试试
回复 支持 反对

使用道具 举报

0

主题

57

帖子

60

积分
交易币
0

编程一段

Rank: 2

发表于 2015-6-1 11:44:53 | 显示全部楼层
总是这个给力,还没时间好好研究carl发的好东西呢
回复 支持 反对

使用道具 举报

0

主题

1

帖子

1

积分
交易币
0

新手入门

Rank: 1

发表于 2022-1-9 21:32:46 | 显示全部楼层
点赞支持,学习了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



GMT+8, 2022-1-19 05:35 , Processed in 0.097965 second(s), 25 queries .

© 2001-2011 Powered by Discuz! X3.2.

快速回复 返回顶部 返回列表