
import win.ui;
import godking.vlistEx;
// 创建主窗体
/*DSG{{*/
mainForm = win.form(text="vlistEx 课程表示例";right=575;bottom=383)
mainForm.add(
vlist1={cls="vlistEx";left=10;top=10;right=552;bottom=392;db=1;dl=1;dr=1;dt=1;z=1}
)
/*}}*/
// 定义课程表数据
var scheduleData = {
fields = {"时间/周次", "周一", "周二", "周三", "周四", "周五"},
rows = {
{ "08:00-09:35", "高等数学", "", "高等数学", "高等数学", "" },
{ "09:50-11:25", "", "大学物理", "大学物理", "", "大学物理" },
{ "11:40-12:25", "午餐", "午餐", "午餐", "午餐", "午餐" },
{ "14:00-15:35", "程序设计", "程序设计", "", "程序设计", "" },
{ "15:50-17:25", "", "", "选修课", "", "选修课" },
{ "19:00-20:35", "自习", "自习", "自习", "自习", "自习" }
}
}
mainForm.vlist1.setTable(scheduleData.rows /*数据表*/, scheduleData.fields/*列标题*/,{80, 80, 80, 80, 80, 80}/*列宽*/,/*0左1中2右*/,/*转数组*/,/*转Utf8*/,/*克隆表*/,/*恢复设置*/)
mainForm.vlist1.setRowHeight(40); //设置行高
mainForm.vlist1.selectedBkColor = null; //取消选择行背景色
// 设置表头样式
mainForm.vlist1.headerBkcolor = 0x4472C4; //表头背景色
mainForm.vlist1.headerFont = ::LOGFONT(name="微软雅黑";h=12;color=0xFFFFFF); //表头字体:白色
mainForm.vlist1.setColumnAlign( /*列号*/,1/*0左1中2右*/,1/*0顶1中2底*/); //对齐方式
//用一个变量储存鼠标点击的单元格所在的行号
var oldRow;
//绘制单元格背景
mainForm.vlist1.onDrawCellBg = function(row,col,hdc,rect,bkcolor,text){
if col<2 return ; //从第二列开始处理
if row==owner.clickRow and col==owner.clickCol return false,0x83B314; //设置选中单元格背景
if row==owner.mouseRow and col==owner.mouseCol return false,0x60A4F4; //设置当前鼠标所在单元格背景
}
//鼠标移动到新单元格时,刷新 新、旧单元格所在行
mainForm.vlist1.onMouseCellChanged = function (oldrow,oldcol,row,col){
owner.redraw();
//少量数据可以直接全表刷新,数据量大的话,可以采用下面的方法,仅刷新两行即可。
/****
//先刷新旧行
if oldrow {
mainForm.vlist1.redrawRow(oldrow /*开始行*/,/*结束行可省略*/,/*是否强制*/);
}
//再刷新新行
if row and row!==oldrow { //如果新、旧单元格所在行不一样,则刷新新单元格
mainForm.vlist1.redrawRow(row /*开始行*/,/*结束行可省略*/,/*是否强制*/);
}
****/
}
//鼠标点击时,刷新选中单元格
mainForm.vlist1.onClick = function(row/*行*/,col/*列*/,x,y,buttonIndex/*按钮区域序号*/){
owner.redraw();
//少量数据可以直接全表刷新。数据量大的话,可以采用下面的方法,仅刷新两行即可。
/****
//先刷新旧单元格所在行
if oldRow {
mainForm.vlist1.redrawRow(oldRow /*开始行*/,/*结束行可省略*/,/*是否强制*/);
}
//再设置并刷新新单元格所在行
if oldRow!==row { //如果新、旧单元格所在行不一样,则刷新新单元格
oldRow=row;
if row {
mainForm.vlist1.redrawRow(row /*开始行*/,/*结束行可省略*/,/*是否强制*/);
}
}
****/
}
// 显示窗体
mainForm.show();
win.loopMessage();