以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  实时显示  (http://foxtable.com/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
--  
日期比较的时候,加上条件,日期小于当前行的日期,或日期为空。

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