虚表 —— 下拉列表

光庆 9月前 1007

import win.ui;
import godking.vlistEx;
/*DSG{{*/
mainForm = win.form(text="vlistEx - table adapter";right=607;bottom=319;border="thin")
mainForm.add(
listview={cls="vlistEx";left=16;top=24;right=595;bottom=304;acceptfiles=1;aw=1;db=1;dl=1;dr=1;dt=1;edge=1;hscroll=1;vscroll=1;z=1}
)
/*}}*/
//======================= 创建虚表 =======================
mainForm.listview.setColumns("下拉列表框(双击下拉)")
var t = { {"张三"}, {"李四"}, {"王五"}, {"SSS"}, {"AAA"}}
mainForm.listview.setTable(t,false);
//======================= 功能演示 =======================
mainForm.listview.setColumnType(1, 1/*_vlistEx_ColType_ComboBox*/, true/*显示小箭头*/, 0xFF00FF/*箭头颜色*/ )
mainForm.listview.setComboBoxItems({"张三", "李四", "王五", "SSS", "AAA"}); //设置下拉列表项目
mainForm.listview.onEditBegin = true;  //允许编辑才能下拉
mainForm.show();
win.loopMessage();


注意:编辑数值列时,如果选择了非数值项,会因为选择的项目转为数值后为null,而将单元格内容设置为""。然后再次编辑,就可以选择非数值项了。也就是说中间进行了一次数据格式的转换过程。

下面这段代码,演示编辑数值列时,直接不允许选择非数值项:

import win.ui;
import godking.vlistEx;
/*DSG{{*/
var mainForm = win.form(text="aardio";right=757;bottom=467;border="thin")
mainForm.add(
button={cls="button";text="Button";left=32;top=416;right=120;bottom=464;z=2};
vlist={cls="vlistEx";left=8;top=8;right=752;bottom=408;edge=1;z=1}
)
/*}}*/

var tt = {fields= {"序号","姓名","年龄"}}

for(i=1;100;1){
    var t = {};
    t["序号"]="[@rowindex]"
    t["姓名"]="姓名" ++ (math.random(10,20))
    t["年龄"]=math.random(10,20)
    ..table.push(tt,t)
}
mainForm.vlist.comboBoxWithEx = true
mainForm.vlist.setTable(tt,{"序号","姓名","年龄"}/*列标题*/,/*列宽*/,1/*0左1中2右*/,/*字典转为数组*/,/*字符串转为Utf8*/,/*是否克隆新表*/)
mainForm.vlist.setColumnType(3, 1/*_vlistEx_ColType_ComboBox*/, true/*显示小箭头*/, 0xFF00FF/*箭头颜色*/ )
mainForm.vlist.setComboBoxItems({"123张三", "45", "56.0", "SSS123", "AAA"}); //设置下拉列表项目
mainForm.vlist.onEditBegin = true;  //允许编辑才能下拉

mainForm.vlist.onEditEnd = function(row/*行*/,col/*列*/,text/*内容*/,endType/*结束类型*/){
	if col=3 {
		return tonumber(text)=text;
	}
	return true; 
}


mainForm.show();
win.loopMessage();


最新回复 (8)
  • xiaobai 27天前
    0 引用 2
    此楼层已删除
  • xiaobai 27天前
    0 引用 3
    当单元格内有初始值且不在下拉选项里时,第一次下拉选择时会将单元格的值设置为空而不是选择的值,不知道是bug还是特意这样设置的?
  • 光庆 26天前
    0 引用 4
    xiaobai 当单元格内有初始值且不在下拉选项里时,第一次下拉选择时会将单元格的值设置为空而不是选择的值,不知道是bug还是特意这样设置的?
    经测试没发现这种现象,你把复现代码发上来看看。
  • xiaobai 26天前
    0 引用 5
    光庆 经测试没发现这种现象,你把复现代码发上来看看。

    我又试了一下,初始值是字符串类型的没事,初始值是数字的就会那样

     import win.ui;
    import godking.vlistEx;
    
    /*DSG{{*/
    var mainForm = win.form(text="aardio";right=757;bottom=467;border="thin")
    mainForm.add(
    button={cls="button";text="Button";left=32;top=416;right=120;bottom=464;z=2};
    vlist={cls="vlistEx";left=8;top=8;right=752;bottom=408;edge=1;z=1}
    )
    /*}}*/
    
    var tt = {fields= {"序号","姓名","年龄"}}
    
    for(i=1;100;1){
    	var t = {};
    	t["序号"]="[@rowindex]"
    	t["姓名"]="王"++i
    	t["年龄"]=math.random(10,20)
    	..table.push(tt,t)
    }
    
    mainForm.vlist.setTable(tt,{"序号","姓名","年龄"}/*列标题*/,/*列宽*/,1/*0左1中2右*/,/*字典转为数组*/,/*字符串转为Utf8*/,/*是否克隆新表*/)
    
    mainForm.vlist.setColumnType(3, 1/*_vlistEx_ColType_ComboBox*/, true/*显示小箭头*/, 0xFF00FF/*箭头颜色*/ )
    mainForm.vlist.setComboBoxItems({"张三", "李四", "王五", "SSS", "AAA"}); //设置下拉列表项目
    mainForm.vlist.onEditBegin = true;  //允许编辑才能下拉
    
    
    mainForm.show();
    win.loopMessage();


  • 光庆 26天前
    0 引用 6

    是的,我在内部处理了,自动判断数据类型。如果原来是数值,结果你输入了非数值,默认为你输入错了。这种情况下,建议你把单元格类型确定一下,数值和文本尽量不要混用。因为有些计算,数值和文本是不能混用的。如果你这一列是文本,可以这样: t["年龄"]=tostring(math.random(10,20))

  • xiaobai 26天前
    0 引用 7
    光庆 是的,我在内部处理了,自动判断数据类型。如果原来是数值,结果你输入了非数值,默认为你输入错了。这种情况下,建议你把单元格类型确定一下,数值和文本尽量不要混用。因为有些计算,数值和文本是不能混用的。如果 ...
    好的,感谢光庆答疑
  • 光庆 26天前
    0 引用 8
    xiaobai 好的,感谢光庆答疑

    你可以参考下面这段代码,应该能处理一些特殊情况:

    import win.ui;
    import godking.vlistEx;
    /*DSG{{*/
    var mainForm = win.form(text="aardio";right=757;bottom=467;border="thin")
    mainForm.add(
    button={cls="button";text="Button";left=32;top=416;right=120;bottom=464;z=2};
    vlist={cls="vlistEx";left=8;top=8;right=752;bottom=408;edge=1;z=1}
    )
    /*}}*/
    
    var tt = {fields= {"序号","姓名","年龄"}}
    
    for(i=1;100;1){
        var t = {};
        t["序号"]="[@rowindex]"
        t["姓名"]="姓名" ++ (math.random(10,20))
        t["年龄"]=math.random(10,20)
        ..table.push(tt,t)
    }
    mainForm.vlist.comboBoxWithEx = true
    mainForm.vlist.setTable(tt,{"序号","姓名","年龄"}/*列标题*/,/*列宽*/,1/*0左1中2右*/,/*字典转为数组*/,/*字符串转为Utf8*/,/*是否克隆新表*/)
    mainForm.vlist.setColumnType(3, 1/*_vlistEx_ColType_ComboBox*/, true/*显示小箭头*/, 0xFF00FF/*箭头颜色*/ )
    mainForm.vlist.setComboBoxItems({"123张三", "45", "56.0", "SSS123", "AAA"}); //设置下拉列表项目
    mainForm.vlist.onEditBegin = true;  //允许编辑才能下拉
    
    mainForm.vlist.onEditEnd = function(row/*行*/,col/*列*/,text/*内容*/,endType/*结束类型*/){
    	if col=3 {
    		return tonumber(text)=text
    	}
    	return true; 
    }
    
    
    mainForm.show();
    win.loopMessage();


  • xiaobai 26天前
    0 引用 9
    光庆 你可以参考下面这段代码,应该能处理一些特殊情况:import win.ui; import godking.vlistEx; /*DSG{{*/ var&am ...

返回