以文本方式查看主题 - 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 -- 哈哈,原来可以不带类型定义变量。 谢谢!
|