以文本方式查看主题

-  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
蓝色的是根据上面的指导进行了判断,保存,但是没起作用,所以又屏蔽了。如若删除一行数据后,到红色行就开始报错。

图片点击可在新窗口打开查看此主题相关图片如下:error.png
图片点击可在新窗口打开查看

[此贴子已经被作者于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 是否存在呢?
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目5.rar
这是一个简单的例子,我就没有做取值过滤了,直接用的弹窗来使问题重现。


--  作者:大红袍
--  发布时间: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编辑过]