以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 怎么判断数据是否保存 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=78135) |
||||
-- 作者:307587760 -- 发布时间:2015/12/2 19:50:00 -- 怎么判断数据是否保存 请教老师: 我有10行数据,删除了一条,Table里面就剩下了9条数据,DataTable里面也只剩下了9条数据,但是即使这样,我的数据还是没有保存成功,因为我关闭项目的时候系统会问我数据是否需要保存 重点是我想做一个判断,怎么能断定数据保存了没有,系统怎么检测到我的数据没有保存的呢,求老师指点,谢谢!
|
||||
-- 作者:大红袍 -- 发布时间:2015/12/2 19:51:00 -- http://www.foxtable.com/help/topics/0387.htm
|
||||
-- 作者:307587760 -- 发布时间:2015/12/3 10:15:00 -- 老师这个不行啊,我写在了DrawCell中,但是代码没有走到这里,请问系统每次退出的时候是怎么判断数据没有保存的呢 |
||||
-- 作者:大红袍 -- 发布时间:2015/12/3 10:19:00 -- 上传例子说明什么问题啊。 |
||||
-- 作者:大红袍 -- 发布时间:2015/12/3 10:19:00 -- 以下是引用307587760在2015/12/3 10:15:00的发言:
老师这个不行啊,我写在了DrawCell中,但是代码没有走到这里,请问系统每次退出的时候是怎么判断数据没有保存的呢
http://www.foxtable.com/help/topics/0668.htm
|
||||
-- 作者:307587760 -- 发布时间:2015/12/3 12:28:00 -- 老师,我简单做了一个例子,但是问题没有重现。但是我可以肯定的是DrawCell里面的代码有问题,还请老师帮忙分析一下代码: \'If DataTables("产值明细表").HasChanges Then \'Exit Sub \'End If Dim v1() As String = {"申报日期","所属期间","开发项目","开发产品","合同名称","乙方"} Dim FreezeCols As New List(of String) FreezeCols.AddRange(v1) \'将数组中的元素全部加入到集合中 If not FreezeCols.Contains(e.Col.Name) Then If e.Row.IsNull("审核人员") Or trim(e.Row("审核人员"))="" Then e.Style = "未审核" End If End If If not e.Row.IsNull("乙方") Then If e.Col.Name = "本月付款比例" Then If e.Row(e.Col.Name)>1 Or e.Row(e.Col.Name)< 0 Or e.Row.IsNull(e.Col.Name) e.Style = "错误" \'那么用"不及格"样式绘制单元格 End If End If If e.Col.Name = "申报产值" Then If e.Row.IsNull(e.Col.Name) = True e.Style = "错误" \'那么用"不及格"样式绘制单元格 End If End If End If 蓝色的是根据上面的指导进行了判断,保存,但是没起作用,所以又屏蔽了。如若删除一行数据后,到红色行就开始报错。
[此贴子已经被作者于2015/12/3 12:28:24编辑过]
|
||||
-- 作者:大红袍 -- 发布时间:2015/12/3 14:25:00 -- 代码没有问题。你去点击看哪里的事件有错
http://www.foxtable.com/help/topics/1485.htm
|
||||
-- 作者:307587760 -- 发布时间:2015/12/7 16:53:00 -- 你好,老师,这个问题已经找到原因了,但是还是没有解决方案,所以还请老师帮忙看看如何解决,代码如下: If e.Table.Current Is Nothing Or DataTables(e.Table.Name).DataCols.Contains("乙方")=False Then Tables("产值情况_Table1").Filter = "[乙方] = \'\'" Forms("产值情况").Text= "产值情况:当前未选定有效行" Else If RibbonTabs("Common").Groups("审核").Items("单合同显示").Pressed Then SQLStr=SQLStr & " and [本月应付款] <> \'0\' and [是否增量]=false and [是否预估数]=false" SQLStr=SQLStr Tables("产值情况_Table1").Filter = SQLStr & " and ([本月应付款] <> \'0\' or [申报产值]<>\'0\' ) and [是否预估数]=false" & ZLMode Tables("产值情况_Table1").Sort ="所属期间 DESC" Forms("产值情况").Text= "单合同-产值情况" Else Tables("产值情况_Table1").Filter = "[乙方] = \'" & e.Table.Current("乙方") & "\'" _ & " and [本月应付款] <> \'0\' and [是否增量]=false and [是否预估数]=false" Tables("产值情况_Table1").Filter = "[乙方] = \'" & e.Table.Current("乙方") & "\'" _ & " and ( [本月应付款] <> \'0\' or [申报产值]<>\'0\' ) And [是否预估数]=false" & ZLMode MessageBox.Show(Tables("产值情况_Table1").Filter) \' Tables("产值情况_Table1").Sort ="所属期间 DESC" Forms("产值情况").Text= "全部合同-产值情况" End If End If 我的代码如上,代码走到红色的地方时候报错,报错的条件是我删除了关键表的最后一条数据,代码在CurrentChanged 中,删除数据肯定触发了CurrentChanged,但是此时再去访问e.Table.Current("乙方"),显然是不可能的,因为此行已经被删除了 所以代码报错了,请问老师我该如何去判断e.Table.Current 是否存在呢?
这是一个简单的例子,我就没有做取值过滤了,直接用的弹窗来使问题重现。
|
||||
-- 作者:大红袍 -- 发布时间:2015/12/7 17:27:00 -- BeforeDeleteDataRow
e.DataTable.GlobalHandler.CurrentChanged = False
DataRowDeleted
e.DataTable.GlobalHandler.CurrentChanged = True |
||||
-- 作者:307587760 -- 发布时间:2015/12/7 17:54:00 -- 试试,谢谢 [此贴子已经被作者于2015/12/7 17:56:20编辑过]
|