Foxtable(狐表)用户栏目专家坐堂 → 实时显示


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

主题:实时显示

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


加好友 发短信
等级:四尾狐 帖子:822 积分:5782 威望:0 精华:0 注册:2015/2/3 22:19:00
实时显示  发帖心情 Post By:2015/4/12 10:17:00 [只看该作者]

做了一个窗口,显示以往的历史记录信息,事件写在currentchanged 里面的

If Forms("历史服务").Opened Then
With DataTables("派工表")
Dim r As Row = e.Table.Current
Dim s As String = "客户信息 like '" & r("客户信息").split(" ")(0) & "%'"
If r.Isnull("客户信息") Then s = "1=2"
Dim drs As List(Of DataRow) = e.Table.DataTable.Select(s & " And _Identify <> " & r("_Identify") & " And 日期 <= #" & r("日期") & "#", "日期 Desc")
If drs.Count > 0 Then
Forms("历史服务").Controls("TextBox1").Text = drs(0)("客户信息")
Forms("历史服务").Controls("TextBox2").Text = drs(0)("服务内容")
Forms("历史服务").Controls("TextBox3").Text = drs(0)("日期")
Forms("历史服务").Controls("TextBox8").Text = drs(0)("备注")
Else
Forms("历史服务").Controls("TextBox2").Text = Nothing
Forms("历史服务").Controls("TextBox3").Text = Nothing
Forms("历史服务").Controls("TextBox1").Text = Nothing
Forms("历史服务").Controls("TextBox8").Text = Nothing
End If
If drs.Count > 1 Then
Forms("历史服务").Controls("TextBox4").Text = drs(1)("服务内容")
Forms("历史服务").Controls("TextBox5").Text = drs(1)("日期")
Else
Forms("历史服务").Controls("TextBox4").Text = Nothing
Forms("历史服务").Controls("TextBox5").Text = Nothing
End If
If drs.Count > 2 Then
Forms("历史服务").Controls("TextBox6").Text = drs(2)("服务内容")
Forms("历史服务").Controls("TextBox7").Text = drs(2)("日期")
Else
Forms("历史服务").Controls("TextBox6").Text = Nothing
Forms("历史服务").Controls("TextBox7").Text = Nothing
End If
End With
If E.Table.Current Is Nothing Then
Forms("历史服务").Controls("TextBox8").Text = Nothing
Forms("历史服务").Controls("TextBox1").Text = Nothing
Forms("历史服务").Controls("TextBox9").Text = Nothing
Else
Forms("历史服务").Controls("TextBox1").Text = e.Table.current("客户信息")
Forms("历史服务").Controls("TextBox8").Text = e.Table.current("备注")
Forms("历史服务").Controls("TextBox9").Text = e.Table.current("签约终止日")
End If
End If


当这一列发生变化了,历史记录不会马上显示到窗口里面,只能点其他行,再回到这一行,才可以显示出来。 应该怎么写,才能实时显示到窗口里面呢?

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


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

如果只在表编辑,那么在AfterEdit事件加上代码:
if e.col.name = "某某列" then
e.Table.RaiseCurrentChanged()
end if

否则DataColChanged

if e.Datacol.name = "某某列" Andalso e.DataRow("_Identify") = Tables("表名").Current("_Identify")  then
Tables("表名").RaiseCurrentChanged()
end if

参考:
http://www.foxtable.com/help/topics/2367.htm


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


加好友 发短信
等级:四尾狐 帖子:822 积分:5782 威望:0 精华:0 注册:2015/2/3 22:19:00
  发帖心情 Post By:2015/4/12 10:54:00 [只看该作者]

我在afteredit 加入了:
Select Case e.Col.name
    Case "客户信息"
        If e.Row("_Identify") = Tables("派工表").Current("_Identify") '如果发生变化的是当前行
            Tables("派工表").RaiseCurrentChanged() '触发订单表的CurrentChanged事件,相当于重新统计一次.
        End If
End Select

效果是出来了,但结果有点不尽人意。第一楼窗口里面显示的是最后三笔此客户的历史信息,以前没问题,现在的问题是:不显示最后一次的记录了,只显示倒数第二笔, 第三笔,第四笔的记录。

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2015/4/12 11:23:00 [只看该作者]

你放在DataColChanged事件中看看

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2015/4/12 11:31:00 [只看该作者]

另AfterEdit事件,不需要判断是否是当前行的:

Select Case e.Col.name
    Case "客户信息"
            Tables("派工表").RaiseCurrentChanged() '触发订单表的CurrentChanged事件,相当于重新统计一次.
End Select

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


加好友 发短信
等级:四尾狐 帖子:822 积分:5782 威望:0 精华:0 注册:2015/2/3 22:19:00
  发帖心情 Post By:2015/4/12 11:32:00 [只看该作者]

也加了的,也是一样,要少最后一笔记录

TIANTIAN, 我想你了 

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2015/4/12 11:40:00 [只看该作者]

仔细看看一楼的代码,你一楼的代码本来就只显示3条数据的哦,如果有4条符合条件,恰好最后一行是第4条,当然就不会显示了。

这样改一下:

Dim drs As List(Of DataRow) = e.Table.DataTable.Select(s & " And _Identify <> " & r("_Identify") & " And 日期 <= #" & r("日期") & "#", "[_SortKey] Desc")


你原来的代码很笨拙,但是不知道你要干什么,只能给出上面的建议。
[此贴子已经被作者于2015/4/12 11:41:44编辑过]

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


加好友 发短信
等级:四尾狐 帖子:822 积分:5782 威望:0 精华:0 注册:2015/2/3 22:19:00
  发帖心情 Post By:2015/4/12 12:58:00 [只看该作者]

加这段代码: [_SortKey] Desc 也不能,我知道原因了,是因为当那一行没有日期时,就不能正常显示最后三笔历史记录。

In this case/就这种情况,如果此行没有日期,怎么显示最后三笔记录呢?

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


加好友 发短信
等级:四尾狐 帖子:822 积分:5782 威望:0 精华:0 注册:2015/2/3 22:19:00
  发帖心情 Post By:2015/4/12 13:07:00 [只看该作者]

If r.Isnull("客户信息") andalso e.datarow("日期").isnull = false Then s = "1=2"
Dim drs As List(Of DataRow) = e.Table.DataTable.Select(s & " And _Identify <> " & r("_Identify") & " And 日期 <= #" & r("日期") & "#", "日期 Desc")
 else if
....


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2015/4/12 15:00:00 [只看该作者]

日期比较的时候,加上条件,日期小于当前行的日期,或日期为空。

Dim drs As List(Of DataRow) = e.Table.DataTable.Select(s & " And _Identify <> " & r("_Identify") & " And (日期 <= #" & r("日期") & "# Or 日期 Is Null)", "[_SortKey] Desc")

 回到顶部
总数 12 1 2 下一页