以文本方式查看主题
- Foxtable(狐表) (http://foxtable.com/bbs/index.asp)
-- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2)
---- 两个问题需要解答一下 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=14894)
|
-- 作者:blackzhu
-- 发布时间:2011/12/6 11:09:00
-- 两个问题需要解答一下
If Tables(e.form.Name).Current("请购依据") ="销售订单" Then Dim cmd As New SQLCommand Dim dt As DataTable cmd.C cmd.CommandText = "SELECT DISTINCT 系统单号 From {销售订单}" dt = cmd.ExecuteReader() e.Sender.ComboList= dt.GetComboListString("系统单号") End If
我在控件里面判断如果是下销售订单的时候,可以下拉显示系统单号,但是如果显示手工录入的时候,本框下拉没有数据,要手工输入,我应该怎么设置?
第二个:我用这个判断 If
DataTables("产品").HasChanges Then 但是发现一个问题,复制和自动输入的数据不会判断修改,这个是怎么回事?
|
-- 作者:blackzhu
-- 发布时间:2011/12/6 11:16:00
--
表的判断修改应该是我的问题,我看看
[此贴子已经被作者于2011-12-6 11:16:46编辑过]
|
-- 作者:狐狸爸爸
-- 发布时间:2011/12/6 11:19:00
--
1、第一个问题,下来框没有数据,说明你的代码没有执行,这样判断一下啊:
Messagebox.show(Tables(e.form.Name).Current("请购依据")) Messagebox.show(Tables(e.form.Name).Current("请购依据") ="销售订单") If Tables(e.form.Name).Current("请购依据") ="销售订单" Then
\'其他代码 End If
2、第二个问题不存在,不管以任何形式修改数据,HasChanges都会等于True。第一次编辑,你得等编辑结束后,离开单元格或者编辑框,也就是表的数据发生变化后,HasChanges才会等于True。
并非你在单元格或者编辑框输入的过程,HasChanges的值就会发生变化。
[此贴子已经被作者于2011-12-6 11:22:31编辑过]
|
-- 作者:blackzhu
-- 发布时间:2011/12/6 11:51:00
--
老大你理解错了,我是说我选择了销售订单的时候, 那个框子可以将系统单号下拉列出来.
但是我改为手工单号的时候,那个框下拉还会显示系统单号出来,我的要求是 :
Current("请购依据") ="销售订单" 为销售订单时,那个框子可以下拉选择,为手工单号只能手输,不要选择.
第二个问题,是我的问题,我在查!
|
-- 作者:狐狸爸爸
-- 发布时间:2011/12/6 12:05:00
--
这样就行了:
If Tables(e.form.Name).Current("请购依据") ="销售订单" Then
\'现在的代码
Else
e.Sender.ComboList = “” End If
|
-- 作者:blackzhu
-- 发布时间:2011/12/6 12:21:00
--
老大你真厉害.第二个问题,我写了个通用的退出的函数.
我有很多个窗口,有的窗口是有窗口表,有的是没有窗口表,我想不管是窗口表修改还是主表修改,退出时都有对话框提示是否保存什么的?代码如下:
Dim e As FormEventArgs = args(0) Dim Result As DialogResult If Vars("开关") = True Then MessageBox.Show(1) If Tables(e.form.Name).DataTable.HasChanges Then Result = MessageBox.Show("是否将更改并保存本单据?", "提示!", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) If Result = DialogResult.Yes Then If Tables(e.form.Name).Rows.Count>0 Then Tables(e.form.Name).Current("修改人") = _UserName Tables(e.form.Name).Current("修改时间") = Date.Now() Tables(e.form.Name).DataTable.Save() If e.form.ExistControl("Table1") =True Then If Tables(e.form.Name & "_Table1").DataTable.DataRows.Count>0 Then Tables(e.form.Name & "_Table1").DataTable.Save End If End If End If MessageBox.show(2) ElseIf Result = DialogResult.No Then If Tables(e.form.Name).DataTable.HasChanges Then Tables(e.form.Name).DataTable.RejectChanges() If e.form.ExistControl("Table1") =True Then If Tables(e.form.Name & "_Table1").DataTable.DataRows.Count>0 Then Tables(e.form.Name & "_Table1").DataTable.RejectChanges() End If For Each re As Relation In Relations Tables(Re.ChildTable.Name).DataTable.RejectChanges() Next End If Else e.Cancel=True End If End If End If Else \'如果不是新单 If e.form.ExistControl("Table1") =True Then If Tables(e.form.Name & "_Table1").DataTable.HasChanges Then \'如果子表有变动 Result = MessageBox.Show("是否将更改并保存本单据?", "提示!", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) If Result = DialogResult.Yes Then Tables(e.form.Name & "_Table1").DataTable.Save \'则无条件保存 ElseIf Result = DialogResult.No Then Tables(e.form.Name & "_Table1").DataTable.RejectChanges() Else e.Cancel=True End If vars("开关") = False End If End If End If
本来C版帮我加了个开关,当时测试没有问题. 现在测试下来居然主表修改不提示,窗口表修改会提示.
在窗口事件中vars("开关") = False 我加了这个,在新增按钮中加了先开后关的设置.
不知道问题出在什么地方,这个通用代码有没有简单的写法.
|
-- 作者:狐狸爸爸
-- 发布时间:2011/12/6 12:26:00
--
呵呵,用MessageBox去调试,去检测关键的值吧。
既然要满足两个条件:
Vars("开关") = True
Tables(e.form.Name).DataTable.HasChanges
才会有提示,那就去检测这两个条件啊
你的第一个问题,说明你现在有点不在状态了,你应该休息一下了。
|
-- 作者:blackzhu
-- 发布时间:2011/12/6 14:35:00
--
老大,我跟踪不出来了,已经晕了.C版又不在.
能不能按照这样的逻辑不用开关来解决,
通用的代码,就是如有20个表单,有一些是有窗口表,有一些没有窗口表.不管是窗口表还是主表修改后关闭窗口时都会出来提示是否保存?
按是,就全部保存退出窗口,按否不保存退出窗口,按取消不退出窗口什么都不做.
就我那个代码帮我修改一下或者用其他代码都行.
|
-- 作者:狐狸爸爸
-- 发布时间:2011/12/6 14:51:00
--
这样跟踪:
Dim e As FormEventArgs = args(0) Dim Result As DialogResult MssageBox.Show("开关值 =" & Vars("开关")) If Vars("开关") = True Then MssageBox.Show("开关开启了") If Tables(e.form.Name).DataTable.HasChanges Then MssageBox.Show(e.Form.Name & "有变动了 ,所以会提示!") Result = MessageBox.Show("是否将更改并保存本单据?", "提示!", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) If Result = DialogResult.Yes Then If Tables(e.form.Name).Rows.Count>0 Then Tables(e.form.Name).Current("修改人") = _UserName Tables(e.form.Name).Current("修改时间") = Date.Now() Tables(e.form.Name).DataTable.Save() If e.form.ExistControl("Table1") =True Then If Tables(e.form.Name & "_Table1").DataTable.DataRows.Count>0 Then Tables(e.form.Name & "_Table1").DataTable.Save End If End If End If MessageBox.show(2) ElseIf Result = DialogResult.No Then If Tables(e.form.Name).DataTable.HasChanges Then Tables(e.form.Name).DataTable.RejectChanges() If e.form.ExistControl("Table1") =True Then If Tables(e.form.Name & "_Table1").DataTable.DataRows.Count>0 Then Tables(e.form.Name & "_Table1").DataTable.RejectChanges() End If For Each re As Relation In Relations Tables(Re.ChildTable.Name).DataTable.RejectChanges() Next End If Else e.Cancel=True End If End If End If Else \'如果不是新单 MssageBox.Show("开关关闭了") If e.form.ExistControl("Table1") =True Then MssageBox.Show("窗口有Tabl1控件") If Tables(e.form.Name & "_Table1").DataTable.HasChanges Then \'如果子表有变动 MssageBox.Show(e.form.Name & "_Table1") & "有变动,所以要提示") Result = MessageBox.Show("是否将更改并保存本单据?", "提示!", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) If Result = DialogResult.Yes Then Tables(e.form.Name & "_Table1").DataTable.Save \'则无条件保存 ElseIf Result = DialogResult.No Then Tables(e.form.Name & "_Table1").DataTable.RejectChanges() Else e.Cancel=True End If vars("开关") = False End If End If End If
下次更新会加一个参数,返回Table控件对应的DataTable
|