Previous topicNext topic
Help > 开发指南 > SanMuGrid平台编程 > 主要对象 > RowData >
Index

Index属性返回当前行在视图(DataView、View)中序列位置。这个也仅对我们看到的显示到表中的实际顺序有意义。所以请注意,千万不要在内存表中使用此属性,这就不是为内存表设计的。这里的Index跟表中显示的行号是相对应的。因为行号是从1开始的,而Index的序列是从0开始的,所以表中的行号=Index+1。

备注:什么叫内存表?就是我们直接通过Database.ExecuteDataTableHelp方法返回的DataTableHelp对象,如果没有绑定到SmGrid控件中就算内存表。

Index属性本身在DataRow中并不存在,是我们强行扩展添加出来的。实现的原理如下,我们在DataTableHelp对象中添加一个HaveUpdatedDataRowIndex属性,标记当前表的视图是否有变更,如果一旦有变更,就将HaveUpdatedDataRowIndex属性标记为False。这样,每次我们访问Index属性时都会去检测这个属性是否为False,如果是False就会去主动执行一下DataTableHelp的UpdateDataRowIndex方法,然后将HaveUpdatedDataRowIndex属性恢复为True。我们只需要在影响视图结果的数据加载、重新排序、排序列数据变更、上移、下移数据行时及时变更HaveUpdatedDataRowIndex属性为False即可。

鉴于上面的原理。如果我们在需要批量重复使用此Index属性时,可以考虑行执行一下DataTableHelp的UpdateDataRowIndex方法,防止系统因为什么原因遗漏了状态修改而导致程序运行结果不正确。

由这个Index属性我们引申了两个属性,NextRow和PreviousRow。同时也引申了两个函数NextRowData和PreviousRowData。

NextRow:返回当前行的后一行。如果当前行已经为最后一行,则此属性会返回空值。此属性只适合配合SmGrid表使用。在纯后台场景下会一直返回空值。

PreviousRow:返回当前行的前一行。如果当前行已经为第一行,则此属性会返回空值。此属性只适合配合SmGrid表使用。在纯后台场景下会一直返回空值。

NextRowData:返回后一行指定列的值。如果对应的NewRow为空的话则返回DBNull.Value。

PreviousRowData:返回前一行指定列的值。如果对应的PreviousRow为空的话则返回DBNull.Value。

既然引入了两个属性,为什么还要费事地再引入功能差不多的两个方法呢?这是因为引入的两个方法可以解决一些获取数据失败的情况。这样我们就可以在“表达公式”中使用这两个方法来实现类似Excel中的公式那样跨行引用,进而实现流水账式的数据统计。详细的使用可以参考“流水账”的介绍。