以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  对单元格前后台内容进行比较的问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=75206)

--  作者:lake163
--  发布时间:2015/9/30 10:33:00
--  对单元格前后台内容进行比较的问题

在多人同时编辑的情况下,为防止后台数据已更新,在每一次修改前均想判别前后台数据是否一致。为了简便和精细,不采用对比修改时间的方法,而是在表的StartEdit 事件中:

If e.Table.Current Is Nothing Then

Else

    Dim dr As DataRow = Tables("基本信息").Current.DataRow     \'取当前行

If e.Row(e.Col.name) <> dr.SQLGetValue(e.Col.name)         \'对前后台内容进行对比,        

Dim Result As DialogResult

        Result = MessageBox.Show("单元格前后台数据不一致,是否重新加载", "提示", MessageBoxButtons.YesNo)

        If Result = DialogResult.Yes Then

            dr.load(False)            \'运行速度慢

        End If

    End If

End If

 

有几个问题请教老师。

1、当某单元格前后台数据至少有一个为空时,就会提示数据类型出错,主要是NULL值比较的问题。

  请问如何修改?

如果采取先分别判别e.Row(e.Col.name)  dr.SQLGetValue(e.Col.name)是否为空,

那对应的代码又如何写?(不会使用ISNULL

2、因为列有不同的类型,如何定义变量?

A = e.Row(e.Col.name)

B= dr.SQLGetValue(e.Col.name)

这样,在需要进行是否为空的判别时,可使代码更简捷。


--  作者:大红袍
--  发布时间:2015/9/30 10:52:00
--  
Dim dr As DataRow = e.Row.DataRow     \'取当前行
Dim a = e.Row(e.Col.name)
Dim b = dr.SQLGetValue(e.Col.name)
If a <> cstr(iif(b.Gettype.name="DBNull",Nothing,b)) Then
   
    Dim Result As DialogResult
   
    Result = MessageBox.Show("单元格前后台数据不一致,是否重新加载", "提示", MessageBoxButtons.YesNo)
   
    If Result = DialogResult.Yes Then
       
        dr.load(False)            \'运行速度慢
       
    End If
   
End If

--  作者:lake163
--  发布时间:2015/9/30 10:57:00
--  
哈哈,原来可以不带类型定义变量。
谢谢!