以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]求修改,编译不过  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=49356)

--  作者:737182811
--  发布时间: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
--  发布时间:2014/4/16 17:20:00
--  
你想做什么.没有这样的语法 If [C.Name] not In (\'编辑者\',\'执行次数\') Then  
--  作者:737182811
--  发布时间:2014/4/16 17:22:00
--  
就是忽略比较这两个列的newvalue 和oringinalvalue比较。
--  作者:Bin
--  发布时间:2014/4/16 17:26:00
--  
if r.DataRow.OriginalValue(c.name)  <>  r(c.name)  then  \'值变动了
--  作者:737182811
--  发布时间:2014/4/16 17:30:00
--  
我想要选择不同行之前判断一下:
是否除了编辑者列和执行次数列的其他列的内容如果未实际修改过的话,就执行以下。r.reject  或者update一下 ,把编辑者列还原。
对应原来狐爸的例子,这样就可以解锁该列。
[此贴子已经被作者于2014-4-16 17:43:01编辑过]

--  作者:737182811
--  发布时间:2014/4/16 17:43:00
--  
谢谢了,我还是继续自己研究吧。
--  作者:Bin
--  发布时间: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
--  发布时间: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编辑过]

--  作者:有点甜
--  发布时间: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
--  发布时间:2014/4/16 20:36:00
--  
大概看懂.