1、新建一个表,默认是有十行;
2、在其中的任意两行输入点内容,此时行状态会变成已修改状态;
3、打开命令窗口,输入以下内容,筛选出处于修改状态的行;
CurrentTable.StateFilter = StateFilterEnum.Modified
Dim i As Integer = 0
For Each dr As DataRow In DataTables(CurrentTable.Name).DataRows
i=i + 1
output.Show(i)
Next
CurrentTable.StateFilter = StateFilterEnum.Default
按照我的起初理解,十行中我修改了两行,所以显示了两行,历遍所有行后。待会i的值应该是2才对,可实际上不是,还是10。看来StateFilter只是显示两行,实际还是有十行数据,打个比方,假如有十几万行的内容,需要从中找出已修改过的行的一些信息,难道需要把这十几万行都历经一遍或是判断一遍是否修改行的状态吗?这行效率应该会较低呀。
加了判断的代码:
CurrentTable.StateFilter = StateFilterEnum.Modified
Dim i As Integer = 0
For Each dr As DataRow In DataTables(CurrentTable.Name).DataRows
If dr.RowState = DataRowState.Modified
i=i + 1
output.Show(i)
End If
Next
CurrentTable.StateFilter = StateFilterEnum.Default
有什么方法可以让筛选出修改行后,让For each -----next 这样的语句只对应状态为修改过行的数量,而不是所有数据库里的行呀?
而且最好是当前表的视图不要有任何的变化,就是不要出现筛选后再还原的情况,数据量大时可能会一闪一闪的。
[此贴子已经被作者于2011-11-26 23:17:35编辑过]