Foxtable(狐表)用户栏目专家坐堂 → 两个问题需要解答一下


  共有10700人关注过本帖树形打印复制链接

主题:两个问题需要解答一下

帅哥哟,离线,有人找我吗?
blackzhu
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57596 威望:0 精华:15 注册:2008/9/1 9:45:00
两个问题需要解答一下  发帖心情 Post By: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
  2楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57596 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2011/12/6 11:16:00 [只看该作者]

表的判断修改应该是我的问题,我看看
[此贴子已经被作者于2011-12-6 11:16:46编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251060 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By: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
  4楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57596 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2011/12/6 11:51:00 [只看该作者]

老大你理解错了,我是说我选择了销售订单的时候,  那个框子可以将系统单号下拉列出来.

 

但是我改为手工单号的时候,那个框下拉还会显示系统单号出来,我的要求是  :

 

 Current("请购依据") ="销售订单"  为销售订单时,那个框子可以下拉选择,为手工单号只能手输,不要选择.

 

 

 

第二个问题,是我的问题,我在查!


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251060 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/12/6 12:05:00 [只看该作者]

这样就行了:

 

If Tables(e.form.Name).Current("请购依据") ="销售订单" Then

    '现在的代码

Else

   e.Sender.ComboList = “”
End If


 回到顶部
帅哥哟,离线,有人找我吗?
blackzhu
  6楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57596 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By: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 我加了这个,在新增按钮中加了先开后关的设置.

 

  不知道问题出在什么地方,这个通用代码有没有简单的写法.


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251060 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/12/6 12:26:00 [只看该作者]

呵呵,用MessageBox去调试,去检测关键的值吧。

既然要满足两个条件:

Vars("开关") = True

Tables(e.form.Name).DataTable.HasChanges

才会有提示,那就去检测这两个条件啊

 

你的第一个问题,说明你现在有点不在状态了,你应该休息一下了。

 

 


 回到顶部
帅哥哟,离线,有人找我吗?
blackzhu
  8楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57596 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2011/12/6 14:35:00 [只看该作者]

老大,我跟踪不出来了,已经晕了.C版又不在.

 

 

能不能按照这样的逻辑不用开关来解决,

 

  通用的代码,就是如有20个表单,有一些是有窗口表,有一些没有窗口表.不管是窗口表还是主表修改后关闭窗口时都会出来提示是否保存?

 

  按是,就全部保存退出窗口,按否不保存退出窗口,按取消不退出窗口什么都不做.

 

就我那个代码帮我修改一下或者用其他代码都行.


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251060 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By: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


 回到顶部