虚表 —— 下拉列表

光庆 2024-4-3 1252

Code AardioLine:18复制
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
    • 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,而将单元格内容设置为""。然后再次编辑,就可以选择非数值项了。也就是说中间进行了一次数据格式的转换过程。

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

    Code AardioLine:35复制
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
    • 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 3月前
      0 引用 2
      此楼层已删除
    • xiaobai 3月前
      0 引用 3
      当单元格内有初始值且不在下拉选项里时,第一次下拉选择时会将单元格的值设置为空而不是选择的值,不知道是bug还是特意这样设置的?
    • 光庆 3月前
      0 引用 4
      xiaobai 当单元格内有初始值且不在下拉选项里时,第一次下拉选择时会将单元格的值设置为空而不是选择的值,不知道是bug还是特意这样设置的?
      经测试没发现这种现象,你把复现代码发上来看看。
    • xiaobai 3月前
      0 引用 5
      光庆 经测试没发现这种现象,你把复现代码发上来看看。

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

      Code AardioLine:30复制
    • 1.
    • 2.
    • 3.
    • 4.
    • 5.
    • 6.
    • 7.
    • 8.
    • 9.
    • 10.
    • 11.
    • 12.
    • 13.
    • 14.
    • 15.
    • 16.
    • 17.
    • 18.
    • 19.
    • 20.
    • 21.
    • 22.
    • 23.
    • 24.
    • 25.
    • 26.
    • 27.
    • 28.
    • 29.
    • 30.
      • 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();


    • 光庆 3月前
      0 引用 6

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

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

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

      Code AardioLine:35复制
    • 1.
    • 2.
    • 3.
    • 4.
    • 5.
    • 6.
    • 7.
    • 8.
    • 9.
    • 10.
    • 11.
    • 12.
    • 13.
    • 14.
    • 15.
    • 16.
    • 17.
    • 18.
    • 19.
    • 20.
    • 21.
    • 22.
    • 23.
    • 24.
    • 25.
    • 26.
    • 27.
    • 28.
    • 29.
    • 30.
    • 31.
    • 32.
    • 33.
    • 34.
    • 35.
      • 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 3月前
      0 引用 9
      光庆 你可以参考下面这段代码,应该能处理一些特殊情况:import win.ui; import godking.vlistEx; /*DSG{{*/ var&am ...

    返回