Foxtable(狐表)用户栏目专家坐堂 → [求助]求修改,编译不过


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

主题:[求助]求修改,编译不过

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


加好友 发短信
等级:童狐 帖子:246 积分:1775 威望:0 精华:0 注册:2013/12/22 14:54:00
[求助]求修改,编译不过  发帖心情 Post By:2014/4/16 17:19:00 [只看该作者]

If e.OldRange.RowSel <> e.NewRange.RowSel '如果选择的是不同的行
    If e.OldRange.RowSel >= 0 AndAlso e.OldRange.Rowsel < e.Table.Rows.Count Then '而且原来选择的是一个有效的数据行
        Dim r As Row = e.Table.Rows(e.OldRange.Rowsel) '获得原来选择的行
        For Each c As Col In e.Table.Cols
            If [C.Name] not In ('编辑者','执行次数') Then  ‘此行有问题
                MessageBox.Show(c.Name)
            End If
        Next
    End If
End If


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


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

你想做什么.没有这样的语法 If [C.Name] not In ('编辑者','执行次数') Then  

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


加好友 发短信
等级:童狐 帖子:246 积分:1775 威望:0 精华:0 注册:2013/12/22 14:54:00
  发帖心情 Post By:2014/4/16 17:22:00 [只看该作者]

就是忽略比较这两个列的newvalue 和oringinalvalue比较。

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


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

if r.DataRow.OriginalValue(c.name)  <>  r(c.name)  then  '值变动了

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


加好友 发短信
等级:童狐 帖子:246 积分:1775 威望:0 精华:0 注册:2013/12/22 14:54:00
  发帖心情 Post By:2014/4/16 17:30:00 [只看该作者]

我想要选择不同行之前判断一下:
是否除了编辑者列和执行次数列的其他列的内容如果未实际修改过的话,就执行以下。r.reject  或者update一下 ,把编辑者列还原。
对应原来狐爸的例子,这样就可以解锁该列。
[此贴子已经被作者于2014-4-16 17:43:01编辑过]

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


加好友 发短信
等级:童狐 帖子:246 积分:1775 威望:0 精华:0 注册:2013/12/22 14:54:00
  发帖心情 Post By:2014/4/16 17:43:00 [只看该作者]

谢谢了,我还是继续自己研究吧。

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


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

dim ischanged as Boolean  '放在


 For Each c As Col In e.Table.Cols
            if r.DataRow.OriginalValue(c.name)  <>  r(c.name) andalso c.name<>"编辑者" andalso c.name<>"执行次数"  then
                  ischanged = true
            End If
        Next
if ischanged then
   messagebox.show("YOU改变")
end if


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


加好友 发短信
等级:童狐 帖子:246 积分:1775 威望:0 精华:0 注册:2013/12/22 14:54:00
  发帖心情 Post By:2014/4/16 17:54:00 [只看该作者]


我修改一下

dim i as  integer = 0
 For Each c As Col In e.Table.Cols
            if r.DataRow.OriginalValue(c.name)  <>  r(c.name) andalso c.name<>"编辑者" andalso c.name<>"执行次数"  then
                  i = i+1
            End If  
 Next
if i = 0 then
r.reject
end if

重新修改了一下,应该可以了,不过如果需要判断的类似“编辑者”列的数目更多一点的话,难道要无限制andalso下去?
[此贴子已经被作者于2014-4-16 20:32:47编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/4/16 18:35:00 [只看该作者]

 回复8楼,基础的写法就是不断的 andalso 下去。

 

 可以优化成这样

 

Dim names() As String = {"编辑者", "执行次数"}
Dim i As boolean = false
For Each c As Col In e.Table.Cols
    If r.DataRow.OriginalValue(c.name)  =  r(c.name) then
        i = True
    End If
    For Each name As String In names      
        If c.name = name Then
            i = True
        End If
    Next
End If
Next
If i Then
    r.reject
End If

[此贴子已经被作者于2014-4-16 20:38:34编辑过]

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


加好友 发短信
等级:童狐 帖子:246 积分:1775 威望:0 精华:0 注册:2013/12/22 14:54:00
  发帖心情 Post By:2014/4/16 20:36:00 [只看该作者]

大概看懂.

 回到顶部