Foxtable(狐表)用户栏目专家坐堂 → [求助]怎么统计本行各符号的个数?


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

主题:[求助]怎么统计本行各符号的个数?

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


加好友 发短信
等级:幼狐 帖子:181 积分:1620 威望:0 精华:0 注册:2013/4/25 14:05:00
[求助]怎么统计本行各符号的个数?  发帖心情 Post By:2013/5/29 15:12:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:123.jpg
图片点击可在新窗口打开查看

后面三列显示本行所对应符号出现的个数,怎么实现?


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


加好友 发短信
等级:贵宾 帖子:35433 积分:178530 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/5/29 15:22:00 [只看该作者]

If e.DataCol.name <> "圆圈" Then
    e.DataRow("圆圈")=0
    For i As Integer=0 To 6
        If e.DataRow(Tables("表C").Cols(i).Name)="圆" Then
            e.DataRow("圆圈")=e.DataRow("圆圈")+1
        End If
    Next
End If

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


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2013/5/29 16:34:00 [只看该作者]

表中Click事件:

e.Row("圆圈") = Nothing

e.Row("星号") = Nothing

e.Row("对勾") = Nothing

For i As Integer = 0 To 6
    If e.Row(i) = "○" Then
        e.Row("圆圈") + = 1
    ElseIf e.Row(i) = "★" Then
        e.Row("星号") + = 1
    ElseIf e.Row(i) = "√" Then
        e.Row("对勾") + = 1
    End If
Next

[此贴子已经被作者于2013-5-29 16:56:21编辑过]

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


加好友 发短信
等级:幼狐 帖子:181 积分:1620 威望:0 精华:0 注册:2013/4/25 14:05:00
  发帖心情 Post By:2013/5/30 16:39:00 [只看该作者]

谢谢,问题已经可以实现,但是又有了一个新问题。我是想实现只要表有改动,就重新计算,但是我的代码平均计算一次需要1.5秒,批量计算起来太慢,有没有能提高计算速度的办法?

下面是我的表和代码:

 


图片点击可在新窗口打开查看此主题相关图片如下:1.jpg
图片点击可在新窗口打开查看

这个表有几百条记录


图片点击可在新窗口打开查看此主题相关图片如下:2.jpg
图片点击可在新窗口打开查看

这个表有2百条记录左右

 

我是在表1的AfterEdit 中添加的代码如下:

e.Row("项目_1") = 0
e.Row("项目_2") = 0
e.Row("项目_3") = 0
e.Row("项目_出差") = 0
e.Row("项目_休假") = 0
e.Row("项目_事假") = 0

For i As Integer = 3 To 33  '列范围 第一列为0
    If e.Row(i) = "1" Then
        e.Row("项目_1") + = 1
    ElseIf e.Row(i) = "2" Then
        e.Row("项目_2") + = 1
    ElseIf e.Row(i) = "3" Then
        e.Row("项目_3") + = 1
    ElseIf e.Row(i) = "○" Then
        e.Row("项目_事假") + = 1
    ElseIf e.Row(i) = "*" Then
        e.Row("项目_休假") + = 1
    ElseIf e.Row(i) = "√" Then
        e.Row("项目_出差") + = 1
    End If
Next

 

' 以下为项目补助计算
e.Row("合计_驻外补贴") = 0
e.Row("合计_餐补") = 0
e.Row("合计_通讯") = 0
e.Row("合计_交通") = 0
For Each dr As DataRow In DataTables("项目补助信息").DataRows
    For Each dr2 As DataRow In DataTables("项目补助信息").DataRows
        For Each dr3 As DataRow In DataTables("项目补助信息").DataRows
            If e.Row("项目名称") = dr("名称") Then
                If e.Row("项目名称2") = dr2("名称") Then
                    If e.Row("项目名称3") = dr3("名称") Then
                        e.Row("合计_驻外补贴") = e.Row("项目_1") * dr("驻外补贴") + e.Row("项目_2") * dr2("驻外补贴") +e.Row("项目_3") * dr3("驻外补贴")
                        e.Row("合计_餐补") = e.Row("项目_1") * dr("餐补") + e.Row("项目_2") * dr2("餐补") +e.Row("项目_3") * dr3("餐补")
                        e.Row("合计_通讯") = e.Row("项目_1") * dr("通讯")/30 + e.Row("项目_2") * dr2("通讯")/30 +e.Row("项目_3") * dr3("通讯")/30
                        e.Row("合计_交通") = e.Row("项目_1") * dr("交通")/30 + e.Row("项目_2") * dr2("交通")/30 +e.Row("项目_3") * dr3("交通")/30
                       
                    End If
                End If
            End If
        Next
    Next
Next

 

这个代码已经可以实现我的功能,但是缺点就是太慢太慢了,希望能帮我优化,谢谢。


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


加好友 发短信
等级:小狐 帖子:321 积分:2468 威望:0 精华:2 注册:2013/1/16 19:33:00
  发帖心情 Post By:2013/5/30 16:46:00 [只看该作者]

三层嵌套循改改吧

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


加好友 发短信
等级:幼狐 帖子:181 积分:1620 威望:0 精华:0 注册:2013/4/25 14:05:00
  发帖心情 Post By:2013/5/30 16:49:00 [只看该作者]

我也觉得是那里的问题,应该怎么改呢?

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178530 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/5/30 16:51:00 [只看该作者]

If e.Col.name<>"项目_1" AndAlso e.Col.name<>"项目_2" AndAlso e.Col.name<>"项目_3" AndAlso e.Col.name<>"项目_出差" AndAlso e.Col.name<>"项目_休假" AndAlso e.Col.name<>"项目_事假" Then
Dim dic As new Dictionary(of String,Integer)
dic.Add("项目_1")
dic.Add("项目_2")
dic.Add("项目_3")
dic.Add("项目_事假")
dic.Add("项目_休假")
dic.Add("项目_出差")
For i As Integer = 3 To 33  '列范围 第一列为0
    If e.Row(i) = "1" Then
        dic("项目_1") + = 1
    ElseIf e.Row(i) = "2" Then
        dic("项目_2") + = 1
    ElseIf e.Row(i) = "3" Then
        dic("项目_3") + = 1
    ElseIf e.Row(i) = "○" Then
        dic("项目_事假") + = 1
    ElseIf e.Row(i) = "*" Then
        dic("项目_休假") + = 1
    ElseIf e.Row(i) = "√" Then
        dic("项目_出差") + = 1
    End If
Next
e.Row("项目_1")=dic("项目_1")
e.Row("项目_2")=dic("项目_2")
e.Row("项目_3")=dic("项目_3")
e.Row("项目_事假")=dic("项目_事假")
e.Row("项目_休假")=dic("项目_休假")
e.Row("项目_出差")=dic("项目_出差")
End If



突然发现前面的清0是没有意义的代码可以删掉!
[此贴子已经被作者于2013-5-30 16:57:25编辑过]

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178530 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/5/30 16:52:00 [只看该作者]

试试效率如何 如果还是慢.我再修改一下.最后发例子出来 我能测试分析.

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178530 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/5/30 16:59:00 [只看该作者]

你下面那一段是在同一个事件里的啊?参考相同的处理方式优化一下吧.应该有很大的提升

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


加好友 发短信
等级:幼狐 帖子:181 积分:1620 威望:0 精华:0 注册:2013/4/25 14:05:00
  发帖心情 Post By:2013/5/30 16:59:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:333.jpg
图片点击可在新窗口打开查看

 

出现了这个。

[此贴子已经被作者于2013-5-30 17:00:00编辑过]

 回到顶部
总数 24 1 2 3 下一页