以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如何用一列显示某列内容出现的次数?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=7095)

--  作者:yankunhao
--  发布时间:2010/5/13 19:58:00
--  如何用一列显示某列内容出现的次数?

Select e.Col.name
    Case "第一列"
        e.Row("第二列") =Format(e.Table.Compute("Count(第一列)","[第一列] = \'" & e.Row("第一列")  & "\'"),"000")
End Select

  我用在AfterEdit设置上面的代码,虽然按重置不会重新计算,但当再次编辑第一列时第二列的内容还会计算,我想无论什么情况下第二列都只是显第一列出现的次序,用来编码,不知道有什么方法可以实现,以前在易表就用一个函数countif就搞定了。


--  作者:mr725
--  发布时间:2010/5/13 20:31:00
--  
放在DataColChanged事件中试试···
--  作者:yankunhao
--  发布时间:2010/5/13 21:29:00
--  

早已试过了,不行的,或者再加上一个条件语句判断才可以吧


--  作者:狐狸爸爸
--  发布时间:2010/5/13 21:31:00
--  
不能这样编号的,看看帮助中关于编号的内容吧。
--  作者:mr725
--  发布时间:2010/5/13 22:00:00
--  
以下是引用yankunhao在2010-5-13 21:29:00的发言:

早已试过了,不行的,或者再加上一个条件语句判断才可以吧

DataColChanged事件,我测试没问题!!!

 

If e.DataCol.Name = "第一列" Then
    e.dataRow("第二列") =Format(Tables("test").Compute("Count(第一列)","[第一列] = \'" & e.dataRow("第一列")  & "\'"),"000")
end if


图片点击可在新窗口打开查看此主题相关图片如下:test.jpg
图片点击可在新窗口打开查看
[此贴子已经被作者于2010-5-13 22:02:54编辑过]

--  作者:yankunhao
--  发布时间:2010/5/13 22:49:00
--  

如果选择第一列,再点重置列那些数就会变了,或双击一下第一列相应的数值也会变的。变后就不是我所想要的数了。

[此贴子已经被作者于2010-5-13 22:50:06编辑过]

--  作者:狐狸爸爸
--  发布时间:2010/5/13 22:59:00
--  
If e.DataCol.Name = "第一列" AndAlso e.dataRow.IsNull("第二列") Then
    e.dataRow("第二列") =Format(Tables("test").Compute("Count(第一列)","[第一列] = \'" & e.dataRow("第一列")  & "\'"),"000")
end if

--  作者:yankunhao
--  发布时间:2010/5/14 8:55:00
--  
以下是引用狐狸爸爸在2010-5-13 22:59:00的发言:
If e.DataCol.Name = "第一列" AndAlso e.dataRow.IsNull("第二列") Then
    e.dataRow("第二列") =Format(Tables("test").Compute("Count(第一列)","[第一列] = \'" & e.dataRow("第一列")  & "\'"),"000")
end if

这个方法是可以解决重置列的问题,但还有另一个问题不知如何解决,如果需要就第一列的内容进行修正,比如原来的值是张三,现在新的值是李四,那么按这个做法,第二列的内容还是原来的编号,不会自动更新。

[此贴子已经被作者于2010-5-14 8:57:18编辑过]

--  作者:狐狸爸爸
--  发布时间:2010/5/14 9:07:00
--  
那就在AfterEdit事件中也设置一下代码,如果修改的是第一列,则重算第二列的编号。
 
不过提醒你:
 
真正的数据管理软件,不应该这样编号,行的编号应该就是人的身份证号码一样,一旦生成,就不应该改变,就像人的身份证号码,不会因为他人的死亡而改变,追求编号的连续是没有任何实际意义的。
你可以参考一下帮助中“网络环境下的复杂编号”
 

--  作者:mr725
--  发布时间:2010/5/14 13:30:00
--  

如果数据量不大这样可以吧: DataColChanged     这样相当予每次编辑、修改第一列后都重置一次

If e.DataCol.Name = "第一列" Then   

    Dim dys As List(Of String) = DataTables("test").GetUniqueValues("","第一列")
    For Each dy As String In dys
        dim n as integer = 0
        Dim drs As List(Of DataRow)
        drs = DataTables("test").Select("[第一列] = \'" & dy & "\'")
        For Each dr As Datarow In drs
            n = n + 1

            dr("第二列") =Format(n,"000")
        Next
    next
    if e.dataRow.IsNull("第一列")
        e.dataRow("第二列") = ""
    end if
end if

[此贴子已经被作者于2010-5-14 13:41:17编辑过]