动态列表项目之一

如果某列的列表项目需要根据另一列输入的内容而发生变化,那么就需要使用动态列表项目。

例如在A列内容"值1"的时候,B列的列表项目为"项目1|项目2",如果A列内容等于"值2"时,B列的列表项目等于“项目3|项目4”,为此我们可以在PrepareEdit事件中加入如下代码:

If e.IsFocusCell Then
    If
e.Col.Name = "第二列" Then
        Select
Case e.Row("第一列")
            Case
"值1"
                e.Col.ComboList =
"项目1|项目2"
           
Case "值2"
                e.Col.ComboList =
"项目3|项目4"
       
End Select
    End
If
End If

代码的原理很简单,首先判断编辑的是否是第二列,如果是的,则根据第一列的值来设置不同的列表项目。
注意要用IsFocusCell判断一下是否是焦点单元格,否则会影响大面积粘贴数据以及查找替换的效率。

代码虽然简单,但是维护起来却不太方便了,因为如果要增加新的列表项目或者有新的要求,我们就必须重新修改代码,对于已经交付使用的系统,这可能是一个可怕的工作,可怕之处不在于修改代码,而在于逐个终端去更新程序。

所以最好的方式给最终的用户提供自行修改列表项目的功能,实现的步骤是:

1、新建一个表(假定表名为项目),包括两列,分别是“值”和“列表项目”,用于输入每个值及其对应的列表项目:

2、然后在数据录入表的PreparEdit事件中设置如下代码:

If e.IsFocusCell Then
    If
e.Col.Name = "第二列" Then
        Dim
dr As Datarow
        dr =
DataTables("项目").Find("值 = '" & e.Row("第一列") & "'")
        If
dr IsNot Nothing '一定要判断是否存在对应的行
            e.Col.ComboList = dr(
"列表项目")
        End
If
    End
If
End If

代码的原理同样很简单,如果正在输入的是第二列,那么就在项目表查找值等于输入行第一列内容的行,如果找到的话,将列表项目设为该行列表项目列的内容。


本页地址:http://www.foxtable.com/webhelp/topics/1528.htm