以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  跨表查询不改变被查表状态  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=79533)

--  作者:sf020cf
--  发布时间:2016/1/4 14:21:00
--  跨表查询不改变被查表状态

现有车辆信息表一张 在表中有车辆状态一列 当前表事件

If e.DataCol.Name = "车辆状态"

    Dim dr As DataRow
    dr = DataTables("配载订单").Find("车牌 = \'" & e.DataRow("车牌") & "\'" )
    If dr IsNot Nothing \'如果找到, 则设置各列内容
        e.DataRow("车辆状态")= "车辆运营中"
Else
        e.DataRow("车辆状态")= "车辆闲置中"
       
    End If
End If

 

这样在目录树中的车辆状态只会按配载订单当前的信息显示

我想这样在车辆信息窗口加入一个按钮 可以动态选择按哪一天的配载订单来 代码事件是这样

Dim sd As WinForm.DateTimePicker
Dim ed As WinForm.DateTimePicker
sd = e.Form.Controls("DateTimePicker1")
ed = e.Form.Controls("DateTimePicker2")
\'Dim cpbh As String = e.Form.Controls("项目").Value

Dim filter As String = "1=1"
If sd.Value <> Nothing Then
    filter &= " And 出车日期 >= \'" & sd.value & "\'"
End If
If ed.Value <> Nothing Then
    filter &= " And 出车日期 <= \'" & ed.value & "\'"
End If
\'If cpbh <> "" Then
    \'Dim temp As String = "1=2"
    \'For Each s As String In cpbh.split("/")
        \'temp &= " or [项目] Like \'%" & s & "%\' "
    \'Next
   \' filter &= " And (" & temp & ")"
\' End If
If ed.value = Nothing AndAlso sd.value = Nothing Then
    filter &= " And 出车日期 = \'" & Date.today & "\'"
End If
DataTables("配载订单").LoadFilter=filter
DataTables("配载订单").load
DataTables("车辆信息").DataCols("车辆状态").RaiseDataColChanged()

 

这样是可以实现动态选择日期筛选 但是在另外一个界面的配载订单也会跟着转到那一天的数据 怎样才能实现既可以跨表查询又不改变被查表状态


--  作者:大红袍
--  发布时间:2016/1/4 14:25:00
--  

你为什么要加这句重置列的代码?DataTables("车辆信息").DataCols("车辆状态").RaiseDataColChanged()

 

去掉不行?


--  作者:sf020cf
--  发布时间:2016/1/4 18:04:00
--  
我以为一定要重置该列才能得到最新数据 这个节点统计代码怎么写 比如 所有订单  比如车辆运营中(有多少台车在运营)
--  作者:大红袍
--  发布时间:2016/1/4 18:06:00
--  

参考

 

http://www.foxtable.com/help/topics/0393.htm

 

http://www.foxtable.com/help/topics/2741.htm

 

 


--  作者:sf020cf
--  发布时间:2016/1/5 11:21:00
--  

dt = b.Build(False) \'参数设置为False,生成一个临时表,不在主界面显示
\'然后根据统计表生成目录树
Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
trv.BuildTree(dt, "车辆状态|车型|车牌")
trv.StopRedraw
For Each nd As WinForm.TreeNode In trv.AllNodes
    Dim clzt As String = nd.DataRow("车辆状态")
    Dim cx As String = nd.DataRow("车型")
    Dim cp As String = nd.DataRow("车牌")
    Select Case nd.Level
        Case 0
            nd.Text = nd.text & "(" & dt.Compute("Count(订单数)","车辆状态") & "条)"

        Case 1
            nd.Text = nd.text &"(" & dt.Compute("Count(订单数)","车型") & "条)"
        Case 2
            nd.Text = nd.text & "(" & dt.Compute("Count(车牌)" ) & "条)"
       \' Case 3
           \' nd.Text = nd.text & "(" & nd.DataRow("订单数") & "条)"
    End Select
Next
trv.Nodes.Insert("所有车辆","所有车辆(" & dt.Compute("Sum(订单数)") & "条)",0)
trv.ResumeRedraw
\'Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
\'trv.BuildTree("车辆信息", "车辆状态|车型|车牌")
\'trv.Nodes.Insert("所有车辆",0)

 

弄来弄去 还是一头雾水 说车辆状态不是布尔值类型

 


--  作者:大红袍
--  发布时间:2016/1/5 11:23:00
--  

比如,其余类似

 

nd.Text = nd.text & "(" & dt.Compute("Count(订单数)","车辆状态 = \'" & clzt  & "\'") & "条)"


--  作者:sf020cf
--  发布时间:2016/1/5 13:23:00
--  

Dim b As New GroupTableBuilder("统计表1",DataTables("车辆信息"))
b.Groups.AddDef("车辆状态")
b.Groups.AddDef("车型")
b.Groups.AddDef("车牌")
b.Totals.AddDef("车辆状态",AggregateEnum.Count,"订单数") \'根据客户列来统计记录数,也就是订单数
dt = b.Build(False)
 \'参数设置为False,生成一个临时表,不在主界面显示
\'然后根据统计表生成目录树
Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
trv.BuildTree(dt, "车辆状态|车型|车牌")
trv.StopRedraw
For Each nd As WinForm.TreeNode In trv.AllNodes
    Dim clzt As String = nd.DataRow("车辆状态")
    Dim cx As String = nd.DataRow("车型")
    Dim cp As String = nd.DataRow("车牌")
    Select Case nd.Level
        Case 0
            nd.Text = nd.text & "(" & dt.Compute("Count(订单数)","车辆状态 = \'" & clzt  & "\'") & "条)"

        Case 1
            nd.Text = nd.text &"(" & dt.Compute("Count(订单数)","车辆状态 = \'" & clzt  & "\'"and "车型 = \'" & cx & "\'") & "条)" 
        Case 2
            nd.Text = nd.text & "(" & dt.Compute("Count(车牌数)" ) & "条)"
       \' Case 3
           \' nd.Text = nd.text & "(" & nd.DataRow("订单数") & "条)"
    End Select
Next
trv.Nodes.Insert("所有车辆","所有车辆(" & dt.Compute("Sum(订单数)") & "条)",0)
trv.ResumeRedraw

.NET Framework 版本:2.0.50727.5485
Foxtable 版本:2015.12.22.1
错误所在事件:窗口,车辆信息,AfterLoad
详细错误信息:
从字符串“车辆状态 = \'车辆闲置中\'”到类型“Long”的转换无效。
输入字符串的格式不正确。


--  作者:大红袍
--  发布时间:2016/1/5 14:24:00
--  
nd.Text = nd.text &"(" & dt.Compute("Count(订单数)","车辆状态 = \'" & clzt  & "\' and 车型 = \'" & cx & "\'") & "条)" 
--  作者:sf020cf
--  发布时间:2016/1/5 15:00:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:2016-01-05_150309.jpg
图片点击可在新窗口打开查看

--  作者:sf020cf
--  发布时间:2016/1/5 15:02:00
--  

是临时表没统计到车型吗? 但是false之下可以找到对应的车牌