Foxtable(狐表)用户栏目专家坐堂 → 关于StateFilter的咨询


  共有11342人关注过本帖树形打印复制链接

主题:关于StateFilter的咨询

帅哥哟,离线,有人找我吗?
liguichuan
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:361 积分:3185 威望:0 精华:1 注册:2011/4/20 1:40:00
关于StateFilter的咨询  发帖心情 Post By:2011/11/25 20:21:00 [只看该作者]

可否解释一下这三者的区别?

StateFilter

 

Modified :          显示已经修改的行

Original:           原始视图
ModifiedOriginal:   原始视图(仅修改行)

 

 


 回到顶部
帅哥哟,离线,有人找我吗?
小猪鑫鑫
  2楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:832 积分:5867 威望:0 精华:6 注册:2011/5/27 11:41:00
  发帖心情 Post By:2011/11/25 21:44:00 [只看该作者]

假设有十行,你修改了3、5、7、9行,则三者对应显示的行是

modified: 显示已经修改的行 3、5、7、9四行(已修改的行)
original: 原始视图 修改前的十行(原始状态)
modifiedoriginal: 原始视图(仅修改行) 1、2、4、6、8、10六行,此六行是没有修改过的行,已修改过的四行不再显示
这是实践出来的,对于第三个的“仅修改行”我也有点疑问,要请问一下狐狸爸爸,是否写错了,应为“没修改行”,因为系统显示的是没修改的行

 回到顶部
帅哥哟,离线,有人找我吗?
liguichuan
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:361 积分:3185 威望:0 精华:1 注册:2011/4/20 1:40:00
  发帖心情 Post By:2011/11/25 22:16:00 [只看该作者]

modifiedoriginal:是显示修改的行的原始视图。

清楚了。

还有一个问题:怎么筛选出新增、修改过两种状态的行?就是同时显示两种状态的行。


 回到顶部
帅哥哟,离线,有人找我吗?
liguichuan
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:361 积分:3185 威望:0 精华:1 注册:2011/4/20 1:40:00
  发帖心情 Post By:2011/11/26 2:05:00 [只看该作者]

联通网速慢,不传表了,大家请:

 

1、新建一个表;

2、然后随便在某个单元格中填些内容,使其中的一两行变成已修改状态;

3、再新增一行;

4、打开命令窗口;

5、输入:“CurrentTable.StateFilter = StateFilterEnum.Added Or StateFilterEnum.Modified

结果显示未修改过的行,可原意是想筛选显示出新增和修改过的行,该怎么写才正确。

 

 

 另外,请问一下,新增行(未保存)是不是没有"OriginalValue"值?


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/11/26 8:52:00 [只看该作者]

只能显示一种状态的。
新增行没有保存,肯定不存在OriginalValue的值。

 回到顶部
帅哥哟,离线,有人找我吗?
liguichuan
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:361 积分:3185 威望:0 精华:1 注册:2011/4/20 1:40:00
  发帖心情 Post By:2011/11/26 23:02:00 [只看该作者]

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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/11/27 9:23:00 [只看该作者]

你需要分清楚Table和DataTable的概念。

 

CurrentTable.StateFilter = StateFilterEnum.Modified
Dim i As Integer = 0
For Each dr As Row In CurrentTable.Rows
    i=i + 1
    output.Show(i)
Next
CurrentTable.StateFilter = StateFilterEnum.Default

 


 回到顶部