处理选定的多行
如果我们选定了一行数据,那么通过Position属性可以得到选定行的位置,通过Current属性,可以直接获得选定的行,即当前行。
如果我们选定了多行,又该如何获得所有选定行的位置,以及选定的是哪些行呢?
Foxtable提供了两个属性,用于批量处理选定的多行
属性名 | 说明 |
TopPosition | 返回选定区域第一个数据行的位置,如果只选定一行,返回值和Position属性相同。 |
BottomPosition | 返回选定区域最后一个数据行的位置,如果只选定一行,返回值和Position属性相同。 |
和Position属性一样,这两个属性在计算的时候,均不包括分组行,下图清晰地说明了这种特性 ,记住行号是从0开始编号的:
但是也稍有不同,如果选定区域的第一行是分组行,TopPosition会向下寻找,直到找到一个不是分组行的数据行,然后返回此行的位置;
同样,如果选定区域的最后一行是分组行,BottomPosition会向上寻找,直到找到一个不是分组行的数据行,然后返回此行的位置。
除非只选定了一行,而且此行恰好是分组行,TopPosition和BottomPosition属性才会返回-1。
而Position属性不具备上述特性,只要选定的是分组行,就直接返回-1。
下图可以很好地说明这种特性:
这种忽略分组行的处理方式,能大大减少编码的复杂程度,因为我们的代码通常只是处理数据行的,对于分组行是要忽略的。
示例
锁定用户选定的行:
With
Tables("订单")
上述代码,不管是在汇总模式下,还是普通模式下,都能正常地锁定选定的一行或多行,因为代码能够自动排除分组行。
但是如果当前选定的是一行,而且这一行恰好是分组行,那么Position、TopPosition、BottomPosition三个属性都返回-1,导致上述代码运行出错。
所以比较完美的代码是:
With Tables(
"订单")注意我们根据TopPosition是否大于-1,来判断选定区域是否包括分组行,其理由前面已经讲述,就不再重复。