虚表 —— 下拉框过滤函数

光庆 3月前 520

import win.ui;
import godking.comboboxEx;
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=304;bottom=304;acceptfiles=1;aw=1;db=1;dl=1;dr=1;dt=1;edge=1;hscroll=1;vscroll=1;z=1};
vlistEx={cls="vlistEx";left=320;top=24;right=592;bottom=304;acceptfiles=1;aw=1;db=1;dl=1;dr=1;dt=1;edge=1;z=2}
)
/*}}*/

//======================= 创建虚表 =======================
mainForm.listview.setColumns("下拉列表框(双击下拉)")
mainForm.vlistEx.setColumns("下拉列表框(双击下拉)")

var t = { {"张三"}, {"李四"}, {"王五"}, {"SSS"}, {"AAA"}}

mainForm.listview.setTable(t,false/*列标题*/,/*列宽*/,/*0左1中2右*/,/*字典转为数组*/,/*字符串转为Utf8*/,true/*是否克隆新表*/)
mainForm.vlistEx.setTable(t,false/*列标题*/,/*列宽*/,/*0左1中2右*/,/*字典转为数组*/,/*字符串转为Utf8*/,true/*是否克隆新表*/)

//======================= 功能演示 =======================
mainForm.listview.setColumnType(1, 1/*_vlistEx_ColType_ComboBox*/, true/*显示小箭头*/, 0xFF00FF/*箭头颜色*/ )
mainForm.listview.setComboBoxItems({"张三", "李四", "王五", "SSS", "AAA"}); //设置下拉列表项目
mainForm.listview.onEditBegin = true;  //允许编辑才能下拉
mainForm.listview.editOnClick = true; //单击编辑

mainForm.vlistEx.setColumnType(1, 1/*_vlistEx_ColType_ComboBox*/, true/*显示小箭头*/, 0xFF00FF/*箭头颜色*/ )
mainForm.vlistEx.setComboBoxItems({"张三", "李四", "王五", "SSS", "AAA"}); //设置下拉列表项目
mainForm.vlistEx.onEditBegin = true;  //允许编辑才能下拉
mainForm.vlistEx.editOnClick = true; //单击编辑

//======================= 下拉框筛选功能演示 =======================
mainForm.listview.comboboxFilter = function(row,col,text){
    /*** 下拉框单元格筛选函数。返回值:
       1、true:以【下拉框】模式进行编辑;
       2、0:   转为以【编辑框】模式编辑;/*_vlistEx_ColType_Text*/
       3、false或null:禁止编辑;
    ***/
    return ..string.find(text,":"):0;//有汉字的下拉框,没汉字的编辑框。
}
mainForm.vlistEx.comboboxFilter = function(row,col,text){
    /*** 下拉框单元格筛选函数。返回值:
       1、true:以【下拉框】模式进行编辑;
       2、0:   转为以【编辑框】模式编辑;/*_vlistEx_ColType_Text*/
       3、false或null:禁止编辑;
    ***/
    return row%2:false;//奇数行下拉框,偶数行禁止编辑。
}

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


最新回复 (7)
  • mndsoft 3月前
    0 引用 2

    大师,能否改进同一列同时支持下拉框,也支持文字编辑,类似aardio 属性面板表格。


    还有那个红色小箭头换成下拉框图标更直观, ,这样虚表又有新功能了,如下视图:




  • 光庆 3月前
    0 引用 3
    mndsoft 大师,能否改进同一列同时支持下拉框,也支持文字编辑,类似aardio 熟悉面板表格。还有那个红色小箭头换成下拉框图标更直观, ,这样虚表又有新功能了,如下视图:
    已经支持了,看例程
  • mndsoft 3月前
    0 引用 4
    谢谢大师,我看了,貌似这个同一列绑定后,同一列的其他单元格需要编辑的话如何处理?如图一,第2列绑定下拉框后,下面有一些单元格需要修改。
  • 光庆 3月前
    0 引用 5

    修改返回值。false改为0,或直接把:false去掉即可。看函数说明里面有。

  • mndsoft 3月前
    0 引用 6
    谢谢,已搞定。 再提个奢侈的需求:目前貌似只能绑定一组内容下拉框,能否绑定多个内容的下拉框?这样就可以做属性表格了 :-)
  • 光庆 3月前
    0 引用 7
    mndsoft 谢谢,已搞定。 再提个奢侈的需求:目前貌似只能绑定一组内容下拉框,能否绑定多个内容的下拉框?这样就可以做属性表格了 :-)

    内容没有固定的绑定。可以在弹出下拉框之前的事件中,随时改变下拉框内容。

    mainForm.listview.onComboBoxDropDown = function(comboBox,row,col){
        /*下拉列表框即将弹出。参数:下拉列表框或高级下拉框组件、虚表行号、虚表列号*/
        owner.setComboBoxItems(items,0/*可见项数量*/,null/*图片组*/);
    }


  • mndsoft 3月前
    0 引用 8

    ok,可以了,感谢,贴一下供其他需要的朋友参考。

    可以指定某行,列绑定,可以绑定下拉框不同内容,有点类型 属性表格。

    佩服大师虚表的强大


    import win.ui;
    import godking.comboboxEx;
    import godking.vlistEx;
    /*DSG{{*/
    mainForm = win.form(text="vListEX修改文字";right=607;bottom=319;border="thin")
    mainForm.add(
    listview={cls="vlistEx";left=16;top=24;right=304;bottom=304;acceptfiles=1;aw=1;db=1;dl=1;dr=1;dt=1;edge=1;hscroll=1;vscroll=1;z=1};
    vlistEx={cls="vlistEx";left=320;top=24;right=592;bottom=304;acceptfiles=1;aw=1;db=1;dl=1;dr=1;dt=1;edge=1;z=2}
    )
    /*}}*/
    
    //======================= 创建虚表 =======================
    mainForm.listview.setColumns({"序号序号序号","下拉列表框(双击下拉"})
    mainForm.vlistEx.setColumns("下拉列表框(双击下拉)")
    
    var t = { {"张三"}, {"李四"}, {"王五"}, {"SSS"}, {"AAA"}}
    var tt = { 
       {"1","01"} 
       {"2","02"} 
       {"3","03"} 
       {"4","04"} 
    }
    
    mainForm.listview.setTable(tt,false/*列标题*/,/*列宽*/,/*0左1中2右*/,/*字典转为数组*/,/*字符串转为Utf8*/,true/*是否克隆新表*/)
    mainForm.vlistEx.setTable(t,false/*列标题*/,/*列宽*/,/*0左1中2右*/,/*字典转为数组*/,/*字符串转为Utf8*/,true/*是否克隆新表*/)
    
    //======================= 功能演示 =======================
    
    mainForm.listview.setColumnType(2, 1/*列,0,文本,1,下拉_vlistEx_ColType_ComboBox*/, true/*显示小箭头*/, 0xFF00FF/*箭头颜色*/ )
    mainForm.listview.setComboBoxItems({"01", "02", "03", "08"}); //设置下拉列表项目
    mainForm.listview.onEditBegin ={true,2}; //  true;  //允许编辑才能下拉
    mainForm.listview.editOnClick = true; //单击编辑
    
    mainForm.vlistEx.setColumnType(1, 1/*_vlistEx_ColType_ComboBox*/, true/*显示小箭头*/, 0xFF00FF/*箭头颜色*/ )
    mainForm.vlistEx.setComboBoxItems({"张三", "李四", "王五", "SSS", "AAA"}); //设置下拉列表项目
    mainForm.vlistEx.onEditBegin =  true;  //允许编辑才能下拉
    mainForm.vlistEx.editOnClick = true; //单击编辑
    
    mainForm.listview.onComboBoxDropDown = function(comboBox,row,col){
        /*下拉列表框即将弹出。参数:下拉列表框或高级下拉框组件、虚表行号、虚表列号*/
        if row ===2 {
        items ={"01", "02", "03", "04", "08"} 
        }
        if row ===3 {
        items ={"8F", "9F", "2F", "00", "01"} 
        }
        
        owner.setComboBoxItems(items,0/*可见项数量*/,null/*图片组*/);
    }
    
    //======================= 下拉框筛选功能演示 =======================
    mainForm.listview.comboboxFilter = function(row,col,text){
        /*** 下拉框单元格筛选函数。返回值:
           1、true:以【下拉框】模式进行编辑;
           2、0:   转为以【编辑框】模式编辑;/*_vlistEx_ColType_Text*/
           3、false或null:禁止编辑;
        ***/
    
          if row =1 or row =4  {
             return 0  //..string.find(text,":"):0;  //有汉字的下拉框,没汉字的编辑框。       
          } 
          if row === 2 or row === 3{
             return row 
          }
       
        
    }
    mainForm.vlistEx.comboboxFilter = function(row,col,text){
        /*** 下拉框单元格筛选函数。返回值:
           1、true:以【下拉框】模式进行编辑;
           2、0:   转为以【编辑框】模式编辑;/*_vlistEx_ColType_Text*/
           3、false或null:禁止编辑;
        ***/
        return row%2:false;//奇数行下拉框,偶数行禁止编辑。
    }
    
    mainForm.show();
    win.loopMessage();


返回