Foxtable(狐表)用户栏目专家坐堂 → 请老大看看这是什么错误


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

主题:请老大看看这是什么错误

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


加好友 发短信
等级:管理员 帖子:47511 积分:251479 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/7/13 9:56:00 [显示全部帖子]

看看全局表事件CurrentChanged

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


加好友 发短信
等级:管理员 帖子:47511 积分:251479 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/7/13 10:46:00 [显示全部帖子]

你贴的是全局表事件中的代码,还是表事件中的代码?

我觉得全局表事件不应该有这样的代码。

 

实在不行,就传项目上来看看

[此贴子已经被作者于2010-7-13 10:47:03编辑过]

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


加好友 发短信
等级:管理员 帖子:47511 积分:251479 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/7/13 11:14:00 [显示全部帖子]

通过代码看不出啥,全局表事件对任何表都有效,也就是在任何一个表中换行,都会执行全局CurrentChanged事件,问题的原因可能也在此。

 

If e.Table.Name = "XXX" Then

    Dim dt As Datatable = Datatables("数据引用总表")

    For Each c As Col In Currenttable.Cols
    Dim dr As Datarow =dt.Find("[目标表] = '" & Currenttable.Datatable.Name & "' And [目标列] = '" & c.Name & "'")
    If dr IsNot Nothing Then
        Dim yb As String = dr("源表")
        Dim yl As String = dr("源列")
        Dim mb As String = dr("目标表")
        Dim ml As String = dr("目标列")
        Dim ygl As String = dr("源关联")
        Dim bgl As String = dr("标关联")
        Dim ybdr As Datarow = Datatables(yb).Find("[" & ygl & "] = '" & Currenttable.Current(bgl) & "'")
        If ybdr IsNot Nothing Then
            If ybdr.IsNull(yl) Then
                Currenttable.Current(ml) = Nothing
            Else
                Currenttable.Current(ml) = ybdr(yl)
            End If
        End If
    End If
Next

 

 

 

 

 

 

 


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


加好友 发短信
等级:管理员 帖子:47511 积分:251479 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/7/13 11:28:00 [显示全部帖子]

看不出来,做个简单例子看看

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


加好友 发短信
等级:管理员 帖子:47511 积分:251479 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/7/13 11:35:00 [显示全部帖子]

来一个Public 变量,加载前设置为False,加载后设置为True。

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


加好友 发短信
等级:管理员 帖子:47511 积分:251479 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/7/13 11:43:00 [显示全部帖子]

你在你的CurrentChanged事件中判断这个变量的值,是True不执行,是False执行即可。

 

另外在加载数据的Fill语句之前,将此变量设置为True,在Fill语句之后,将此变量设置为False


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


加好友 发短信
等级:管理员 帖子:47511 积分:251479 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/7/13 15:41:00 [显示全部帖子]

你当然知道的,因为Fill语句是你自己写的啊

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


加好友 发短信
等级:管理员 帖子:47511 积分:251479 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/7/13 15:52:00 [显示全部帖子]

修改代码,注意这里不要用CurrentTable,因为并非CurrentTable才会触发CurrentChanged事件,任何表都会触发,所以应该用e.table,而且应该先判断e.Table是否选择有当前行

 

 

Dim dt As Datatable = Datatables("数据引用总表")

If e.Table.Position < 0 Then

     Return

End If

For Each c As Col In e.Table.Cols

    Dim dr As Datarow =dt.Find("[目标表] = '" & e.Table.Datatable.Name & "' And [目标列] = '" & c.Name & "'")

    If dr IsNot Nothing Then

        Dim yb As String = dr("源表")

        Dim yl As String = dr("源列")

        Dim mb As String = dr("目标表")

        Dim ml As String = dr("目标列")

        Dim ygl As String = dr("源关联")

        Dim bgl As String = dr("标关联")

        Dim ybdr As Datarow = Datatables(yb).Find("[" & ygl & "] = '" & e.Table.Current(bgl) & "'")

        If ybdr IsNot Nothing Then

            If ybdr.IsNull(yl) Then

                e.Table.Current(ml) = Nothing

            Else

                e.Table.Current(ml) = ybdr(yl)

            End If

        End If

    End If

Next

[此贴子已经被作者于2010-7-13 15:53:45编辑过]

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


加好友 发短信
等级:管理员 帖子:47511 积分:251479 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/7/14 9:51:00 [显示全部帖子]

不是bug,是你的代码不完善

 回到顶部