以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如何筛选出刚修改过的单元格  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=78125)

--  作者:zhangchi96
--  发布时间:2015/12/2 16:41:00
--  如何筛选出刚修改过的单元格

说明书内容:修改订单数据后,按下菜单中的标记按钮,即可以红底白字标出所有已经修改过的单元格:


已知某个表的列 有 :  客户 单价 折扣

每一列中 都有记录发生了修改


1、筛选出 客户列中有变化的记录


2、筛选出无论哪列有变化及作为有变化的记录


我想,既然系统能测出哪些个单元格是刚被修改ud,就一定能筛选出来。请教 如何书写代码

[此贴子已经被作者于2015/12/2 16:45:02编辑过]

--  作者:大红袍
--  发布时间:2015/12/2 16:45:00
--  
MarkModifedCell = true
Tables("表A").Refresh

--  作者:zhangchi96
--  发布时间:2015/12/2 16:48:00
--  
我要分两种,一种是针对某一列中有变化的,二是针对所有列 有变化 的,帮助文档中找不到 这个代码的用法,请问怎么写?
--  作者:大红袍
--  发布时间:2015/12/2 16:53:00
--  

drawcell事件

 

If e.Col.name = "第二列" Then
    If e.Row(e.Col.name) <> e.Row.DataRow.OriginalValue(e.Col.name) Then
        e.Table.DataTable.AddUserStyle("修改了", Color.Red, Color.black)
        e.style = "修改了"
    End If
End If


--  作者:zhangchi96
--  发布时间:2015/12/2 17:05:00
--  
大红袍老师,可能我表达的意思错了,我要的是筛选,不是标志颜色

就是类似下面这个表达式中的条件,如何针对已经 修改过内容的做个筛选:
Tables("职工表").Filter= "                \'"     \'筛选显示

一种是 筛选出 客户 列有变化的记录
二种是筛选出 客户 单价 折扣 列中至少一个列变化的记录
[此贴子已经被作者于2015/12/2 17:08:06编辑过]

--  作者:大红袍
--  发布时间:2015/12/2 17:11:00
--  

参考

 

Dim idx As String = "-1,"
For Each dr As DataRow In DataTables("表A").datarows
    If dr("第二列") <> dr.OriginalValue("第二列") Then
        idx &= dr("_Identify") & ","
    End If
Next

Tables("表A").Filter = "_Identify in (" & idx.trim(",") & ")"


--  作者:zhangchi96
--  发布时间:2015/12/2 22:42:00
--  
上面是能筛选出[第二列]中有数据变动的记录

如果要筛选所有列有数据变动的记录,我用了下列代码:

Dim idx As String = "-1,"
For Each dr As DataRow In DataTables("职工表").datarows
    For Each dc As DataCol In DataTables("职工表").DataCols
        If dr(dc.Name) <> dr.OriginalValue(dc.Name) Then
            idx &= dr("_Identify") & ","
        End If
    Next
Next
Tables("职工表").Filter = "_Identify in (" & idx.trim(",") & ")"

请教大红袍老师,这样对不对呢?

--  作者:大红袍
--  发布时间:2015/12/2 22:45:00
--  

Dim idx As String = "-1,"
For Each dr As DataRow In DataTables("表A").datarows
    For Each dc As DataCol In DataTables("表A").DataCols
        If dr(dc.Name) <> dr.OriginalValue(dc.Name) Then
            idx &= dr("_Identify") & ","
            Exit For
        End If
    Next
Next

Tables("表A").Filter = "_Identify in (" & idx.trim(",") & ")"


--  作者:zhangchi96
--  发布时间:2015/12/2 23:52:00
--  
Exit For  表示不再遍列该行中后面其他的列了,是不是?

[此贴子已经被作者于2015/12/2 23:58:14编辑过]

--  作者:大红袍
--  发布时间:2015/12/3 0:05:00
--  
是的,一行,只要有一列修改了,其余的就没必要继续循环。