以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 实时显示 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=66695) |
-- 作者:cyrollin -- 发布时间: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 当这一列发生变化了,历史记录不会马上显示到窗口里面,只能点其他行,再回到这一行,才可以显示出来。 应该怎么写,才能实时显示到窗口里面呢?
|
-- 作者:狐狸爸爸 -- 发布时间: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 -- 发布时间: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 效果是出来了,但结果有点不尽人意。第一楼窗口里面显示的是最后三笔此客户的历史信息,以前没问题,现在的问题是:不显示最后一次的记录了,只显示倒数第二笔, 第三笔,第四笔的记录。
|
-- 作者:有点甜 -- 发布时间:2015/4/12 11:23:00 -- 你放在DataColChanged事件中看看 |
-- 作者:有点甜 -- 发布时间:2015/4/12 11:31:00 -- 另AfterEdit事件,不需要判断是否是当前行的: Select Case e.Col.name Case "客户信息" Tables("派工表").RaiseCurrentChanged() \'触发订单表的CurrentChanged事件,相当于重新统计一次. End Select |
-- 作者:cyrollin -- 发布时间:2015/4/12 11:32:00 -- 也加了的,也是一样,要少最后一笔记录 TIANTIAN, 我想你了
|
-- 作者:有点甜 -- 发布时间: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 -- 发布时间:2015/4/12 12:58:00 -- 加这段代码: [_SortKey] Desc 也不能,我知道原因了,是因为当那一行没有日期时,就不能正常显示最后三笔历史记录。 In this case/就这种情况,如果此行没有日期,怎么显示最后三笔记录呢?
|
-- 作者:cyrollin -- 发布时间: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 .... |
-- 作者:有点甜 -- 发布时间:2015/4/12 15:00:00 -- 日期比较的时候,加上条件,日期小于当前行的日期,或日期为空。 |