【第十一章 11.4】列表视图控件Listview -- 简单数据视图
演示:
代码:
// 导入 win.ui 库,用于创建图形界面 import win.ui; /*DSG{{*/ // 创建一个名为 winform 的窗口对象,并设置其属性 var winform = win.form(text="简单数据视图 - 双击编辑单元格(可指定只读列)";right=1031;bottom=712) // 向窗口中添加控件 winform.add( // 添加一个编辑框控件,并设置其属性 edit={cls="edit";left=25;top=584;right=997;bottom=693;edge=1;multiline=1;z=2}; // 添加一个列表视图控件,并设置其属性 listview={cls="listview";left=24;top=27;right=996;bottom=555;edge=1;z=1} ) /*}}*/ // 导入 win.ui.grid 库,用于处理数据视图 import win.ui.grid; // 创建与列表视图关联的数据视图对象 var grid = win.ui.grid(winform.listview); // 设置只读列,这里设置第 1 列为只读,设为 -1 则禁止编辑所有列 grid.setReadonlyColumns(1); // 可选设置自定义显示的列名 grid.setColumns({"ID";"日期";"标题"}) // 导入 sqlite 库,用于操作数据库 import sqlite; // 创建数据库对象,并连接到指定的数据库文件 var db = sqlite("/testParameters.db"); // 执行创建表的 SQL 语句,如果表不存在则创建 db.exec( "CREATE TABLE IF NOT EXISTS @tablename(id INTEGER PRIMARY KEY, date, title);",{ tablename = "myTableName" } ) // 准备插入数据的 SQL 语句 var cmd = db.prepare("INSERT INTO myTableName VALUES (NULL,@date,@title);" ); // 使用 for 循环向表中插入数据 for(i=1;10;1){ cmd.step( date = time().addday( math.random(1,30)); title = string.random(15); ) } // 从数据库获取查询结果并转换为数据表格式 var dataTable = db.getTable("SELECT * FROM [myTableName] "); // 在数据视图中显示数据表 grid.setTable( dataTable ) // 当编辑单元格的值发生变化时触发此事件 grid.onEditChanged = function(text,iItem,iSubItem){ // 获取列名 var name = dataTable.fields[iSubItem] // 在编辑框中打印相关信息 winform.edit.print(dataTable[iItem][name],"-->",text); // 更新数据表中的对应值 dataTable[iItem][name] = text; } /* 当用户点击列头进行排序时触发此事件 column 为列号,desc 参数指定是否倒序 */ grid.onSortColumn = function(column,desc){ // 获取列名 var name = dataTable.fields[column]; // 对数据表进行排序 table.sort(dataTable,desc? (lambda(next) owner[name] > next[name]) : (lambda(next) owner[name] < next[name])); // 在数据视图中更新显示排序后的结果 grid.setTable( dataTable ); // 返回 true 允许当前列排序 return true; } // 显示窗口 winform.show() // 启动界面线程消息循环 win.loopMessage();
相关回复
-
暂无评论!