Foxtable(狐表)用户栏目专家坐堂 → 一个被很多人忽略的属性


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

主题:一个被很多人忽略的属性

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
一个被很多人忽略的属性  发帖心情 Post By:2014/1/9 10:53:00 [只看该作者]

很多用户,包括帮助文件,都忽略了一个重要的属性:

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

 

例如帮助中的代码:

 

If e.Node.Level = 1 Then '如果单击的是第二层节点
    Dim ps() As String = e.Node.FullPath.Split("\")
    Dim tr As Row = Tables("客户").Current
    
Dim dr As DataRow = DataTables("行政区域").Find("省市 = '" & ps(0) & "' And 县市 = '" & ps(1) & "'")
    If dr IsNot Nothing Then '如果在行政区域表找到对应的行,则将此行的值写入客户表的当前行.
        
tr("省市") = dr("省市")
        tr("县市") = dr("县市")
        tr("区号") = dr("区号")
        tr("邮编") = dr("邮编")
        e.Form.DropDownBox.Value = tr("县市") '这行不是多余的,省略此行,无法在表中正常使用此下拉窗口输入数据.
    
End If
    e.Form.DropDownBox.CloseDropdown()  '关闭下拉目录树
End
 If

 

完全可以改写为:

 

If e.Node.Level = 1 Then '如果单击的是第二层节点

    Dim tr As Row = Tables("客户").Current

    Dim dr As DataRow = e.Node.DataRow '获取生成此节点的DataRow

    tr("省市") = dr("省市")

    tr("县市") = dr("县市")

    tr("区号") = dr("区号")

    tr("邮编") = dr("邮编")

    e.Form.DropDownBox.Value = tr("县市") '这行不是多余的,省略此行,无法在表中正常使用此下拉窗口输入数据.

    e.Form.DropDownBox.CloseDropdown()

End If

 

简单不伤神。

[此贴子已经被作者于2014-1-9 11:06:09编辑过]

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


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2014/1/9 11:01:00 [只看该作者]

If e.Node.Level = 1 Then '如果单击的是第二层节点

    Dim ps() As String = e.Node.FullPath.Split("\") '这行是多余的,省略此行,代码正常执行.

    Dim tr As Row = Tables("客户").Current

    Dim dr As DataRow = e.Node.DataRow '获取生成此节点的DataRow

    tr("省市") = dr("省市")

    tr("县市") = dr("县市")

    tr("区号") = dr("区号")

    tr("邮编") = dr("邮编")

    e.Form.DropDownBox.Value = tr("县市") '这行不是多余的,省略此行,无法在表中正常使用此下拉窗口输入数据.

    e.Form.DropDownBox.CloseDropdown()

End If


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


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

呵呵,收到,复制粘贴的,忘记删除了

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


加好友 发短信
等级:童狐 帖子:292 积分:2488 威望:0 精华:0 注册:2011/11/4 17:32:00
  发帖心情 Post By:2014/1/9 14:34:00 [只看该作者]

Case "客户"
        tr.Nodes.Clear '清空当前目录树
        tr.buildtree(e.Form.name & "_明细","客户|订单编号|顶层编码")
        tr.Nodes.Insert("显示所有",0) '最顶端显示
        tr.StopRedraw()
        For Each nd As WinForm.treeNode In tr.AllNodes
            If nd.Level = 2 Then
                nd.text = nd.text & "|" & nd.DataRow("品名")
                Functions.Execute("AddChildren_MPS",nd,dt)
            End If
        Next
        tr.ResumeRedraw()
    Case "产品编码"
        tr.Nodes.Clear '清空当前目录树
        tr.buildtree(e.Form.name & "_明细","顶层编码")
        tr.Nodes.Insert("显示所有",0) '最顶端显示
        tr.StopRedraw()
        For Each nd As WinForm.treeNode In tr.AllNodes
            If nd.Level = 0 Then
               nd.text = nd.text & "|" & nd.DataRow("品名")
                Functions.Execute("AddChildren_MPS",nd,dt)
            End If
        Next
        tr.ResumeRedraw()
请教我这个如果只用顶层编码单独一列生成0层目录,再执行递归函数查找其所有子件生成目录树为什么总提示出错呢?(注释掉此行运行就没问题)红色那行就是想把顶层编码再显示成编号加上品名好识别。而上面选择客户时顶层编码在第二层,执行就正确。

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/1/9 14:54:00 [只看该作者]

检查你的 函数,是否使用价格的 nd.text 而不是nd.name

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


加好友 发短信
等级:童狐 帖子:292 积分:2488 威望:0 精华:0 注册:2011/11/4 17:32:00
  发帖心情 Post By:2014/1/9 15:29:00 [只看该作者]

函数是用的nd.name:
Dim nd As WinForm.TreeNode = args(0)
Dim dt As DataTable = args(1)
Dim drs As  List(of DataRow)
drs = dt.Select("[父件编码] = '" & nd.name & "' and 工序号 is null")
For Each dr As DataRow In drs
    Dim cd As Winform.TreeNode = nd.Nodes.Add(dr("产品编码"),dr("产品编码") & "|" & dr("品名"))
    Functions.Execute("AddChildren_MPS",cd,dt)
Next

现在情况是如果顶层编号设置在第1层以后都可以正确生成目录树,而在0层时只用一列生成目录树就出错,是不是最后那段哪里写错了。谢谢!
'生成目录树
Select Case Cmb1
    Case "订单编号"
        tr.Nodes.Clear '清空当前目录树
        tr.buildtree(e.Form.name & "_明细","订单编号|顶层编码")
        tr.Nodes.Insert("显示所有",0) '最顶端显示
        tr.StopRedraw()
        For Each nd As WinForm.treeNode In tr.AllNodes
            If nd.Level = 1 Then
                nd.text = nd.text & "|" & nd.DataRow("品名")
                Functions.Execute("AddChildren_MPS",nd,dt)
            End If
        Next
        tr.ResumeRedraw()
    Case "客户"
        tr.Nodes.Clear '清空当前目录树
        tr.buildtree(e.Form.name & "_明细","客户|订单编号|顶层编码")
        tr.Nodes.Insert("显示所有",0) '最顶端显示
        tr.StopRedraw()
        For Each nd As WinForm.treeNode In tr.AllNodes
            If nd.Level = 2 Then
                nd.text = nd.text & "|" & nd.DataRow("品名")
                Functions.Execute("AddChildren_MPS",nd,dt)
            End If
        Next
        tr.ResumeRedraw()
    Case "产品编码"
        tr.Nodes.Clear '清空当前目录树
        tr.buildtree(e.Form.name & "_明细","顶层编码")
        tr.Nodes.Insert("显示所有",0) '最顶端显示
        tr.StopRedraw()
        For Each nd As WinForm.treeNode In tr.AllNodes
            If nd.Level = 0 Then
                nd.text = nd.text & "|" & nd.DataRow("品名")
                Functions.Execute("AddChildren_MPS",nd,dt)
            End If
        Next
        tr.ResumeRedraw()
End Select


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


加好友 发短信
等级:童狐 帖子:292 积分:2488 威望:0 精华:0 注册:2011/11/4 17:32:00
  发帖心情 Post By:2014/1/9 15:47:00 [只看该作者]

我另外上个例子吧

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


加好友 发短信
等级:五尾狐 帖子:1049 积分:8150 威望:0 精华:0 注册:2011/10/11 11:13:00
  发帖心情 Post By:2014/1/9 16:01:00 [只看该作者]

帮助上就是那么写的,因此,即使是多余的语句,大家也不知道。

 回到顶部