以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  目录树与用户冲突,报错  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=177390)

--  作者:lgz518
--  发布时间:2022/5/19 22:41:00
--  目录树与用户冲突,报错
目录树与用户冲突,报错

Dim Filter As String
Dim dr As DataRow = e.Node.DataRow \'获取生成此节点的行
If e.Node.Text <> "显示所有行" Then
    Select Case e.Node.Level
        Case 0
            Filter = "[品名] = \'" & dr("品名") & "\'"
        Case 1
            Filter = "[品名] = \'" & dr("品名") & "\' And [规格] = \'" & dr("规格") & "\'"
\'        Case 2
            
\'            Filter = "[品名] = \'" & dr("品名") & "\' And[规格] = \'" & dr("规格") & "\' And [材质] = \'" & dr("材质") & "\'"
            
    End Select
End If
Tables("查询_订单明细").Filter = Filter


Dim Filter As String = "制单人=\'" & _Username & "\'"
Dim dr2 As DataRow
dr2 = DataTables("Users").Find("[Group] = \'" & _UserGroup & "\'")
Dim s As String
If dr2 IsNot Nothing Then
    s = dr2("Xjry")
    If s > "" Then
      Filter = Filter & " or UserID in (" & s.Replace(",", ",") & ")"
        
    End If 
End If
DataTables("订单").LoadFilter = Filter \'
DataTables("订单").Load()

执行上面红字代码,报错下面提示:

.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2022.5.13.2
错误所在事件:窗口,查询,TreeView2,NodeMouseDoubleClick
详细错误信息:
此行已从表中移除并且没有任何数据。BeginEdit() 将允许在此行中创建新数据


取消红字代码,目录树就正常,不报错,但需求配合红字代码,那如何改?谢谢



--  作者:有点蓝
--  发布时间:2022/5/19 23:00:00
--  
目录树不能使用主表生成,必须通过临时表生成,类似:http://www.foxtable.com/webhelp/topics/2054.htm

Dim cmd As New SQLCommand
Dim
 dt As DataTable
cmd
.CommandText = "SELECT DISTINCT 产品,客户 From {订单}"
dt
 = cmd.ExecuteReader()
Dim
 trv As WinForm.TreeView = e.Form.Controls("TreeView1")
trv
.BuildTree(dt,"产品|客户")
trv
.Nodes.Insert("加载所有数据",0)



--  作者:lgz518
--  发布时间:2022/5/20 8:59:00
--  
问题一:表类型:Normal,副表,按上面方法试一下,报错

.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2022.5.13.2
错误所在事件:
详细错误信息:
Microsoft Jet 数据库引擎找不到输入表或查询 \'~TMPCLP入库明细\'。 确定它是否存在,以及它的名称的拼写是否正确。



--  作者:lgz518
--  发布时间:2022/5/20 8:59:00
--  
问题二:下面代码,可不可不写?因为我是项目打开,只加载用户表,权限表,其他都不加载,其他都在窗口打开来加载,不然,做100表,要写100次。

If e.DataTableName = "入库明细" Then
    e.SelecLString = "Sel * From {入库明细} Where [_Identify] Is Null"
End If

--  作者:有点蓝
--  发布时间:2022/5/20 9:17:00
--  
问题一:没有指定数据源:http://www.foxtable.com/webhelp/topics/2344.htm
二:

If e.DataTableName = "用户表" orelse e.DataTableName = "权限表"  Then
else
    e.SelecLString = "Sel * From {" & DataTableName & "} Where 1=2"
End If

--  作者:lgz518
--  发布时间:2022/5/20 11:22:00
--  
老师,下面是目录可以,但是与用户冲突,盖掉用户的代码
Dim cmd As New SQLCommand
Dim
 dt As DataTable
cmd.ConnectionName = "外部数据源名称"
cmd
.CommandText = "SELECT DISTINCT 产品,客户 From {订单}"
dt
 = cmd.ExecuteReader()
Dim
 trv As WinForm.TreeView = e.Form.Controls("TreeView1")
trv
.BuildTree(dt,"产品|客户")
trv
.Nodes.Insert("加载所有数据",0)
使下面代码失效,原来下面代码,当前用户,有下级ID是4.6,使用上面是把所有人都列出,失去指定人只能看指定记录,要如何解决?谢谢
Dim Filter As String = "制单人=\'" & _Username & "\'"
Dim dr2 As DataRow
dr2 = DataTables("Users").Find("[Group] = \'" & _UserGroup & "\'")
Dim s As String
If dr2 IsNot Nothing Then
    s = dr2("Xjry")
    If s > "" Then
      Filter = Filter & " or UserID in (" & s.Replace(",", ",") & ")"
        
    End If 
End If
DataTables("订单").LoadFilter = Filter \'
DataTables("订单").Load()



--  作者:有点蓝
--  发布时间:2022/5/20 11:30:00
--  
cmd.CommandText = "SELECT DISTINCT 产品,客户 From {订单} where " & Filter 
--  作者:lgz518
--  发布时间:2022/5/20 12:09:00
--  
老师,试一下,一样列出都是所有用户,不是当前用户及下级ID的记录
--  作者:有点蓝
--  发布时间:2022/5/20 12:10:00
--  
Filter 有条件吗
--  作者:lgz518
--  发布时间:2022/5/20 14:32:00
--  
Dim cmd As New SQLCommand
Dim
 dt As DataTable
cmd.ConnectionName = "订单"
cmd
.CommandText = "SELECT DISTINCT 产品,客户 From {订单}"
dt
 = cmd.ExecuteReader()
Dim
 trv As WinForm.TreeView = e.Form.Controls("TreeView1")
trv
.BuildTree(dt,"产品|客户")
trv
.Nodes.Insert("加载所有数据",0)

Dim Filter As String = "制单人=\'" & _Username & "\'"
Dim dr2 As DataRow
dr2 = DataTables("Users").Find("[Group] = \'" & _UserGroup & "\'")
Dim s As String
If dr2 IsNot Nothing Then
    s = dr2("Xjry")
    If s > "" Then
      Filter = Filter & " or UserID in (" & s.Replace(",", ",") & ")"
        
    End If 
End If
DataTables("订单").LoadFilter = Filter \'
DataTables("订单").Load()

目录树节点
Dim Filter As String
If
 e.node.Text = "加载所有数据" Then
    Filter = ""

Else

    Dim dr As DataRow = e.Node.DataRow \'获取生成此节点的DataRow
    
Select Case e.Node.Level
        Case 0
            Filter ="[
产品] = \'" & dr("产品") & "\'"
        Case 1
            Filter ="[
产品] = \'" & dr("产品") & "\' And [客户] = \'" & dr("客户") & "\'"
    End Select

End
 If
DataTables
("订单").LoadFilter = Filter
DataTables
("订单").Load()

上面是完整代码,