以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  用户自定义列表项目名称更改后如何更新表中引用过的数据  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=23412)

--  作者:zpx_2012
--  发布时间:2012/9/11 16:30:00
--  用户自定义列表项目名称更改后如何更新表中引用过的数据

各位老师,继续昨天的那个问题

 


此主题相关图片如下:2012911-002.jpg
按此在新窗口浏览图片


 

我设计了如下代码想在子节点重命名后更新表中相关列的所有旧数据:

If e.NewText = "" Then
    e.Cancel = True
    Return
End If
Dim pth() As String = e.Node.FullPath.Split("\\")
Select Case e.node.Level
    Case 0
        DataTables("项目分类").ReplaceFor("项目名称",e.NewText,"项目名称 = \'" & pth(0) & "\'")
    Case 1
        DataTables("项目分类").ReplaceFor("罗列值",e.NewText,"项目名称 = \'" & pth(0) & "\' And 罗列值 = \'" & pth(1) & "\'")
        For Each tb As DataTable In DataTables
            For Each dc As DataCol In tb.DataCols
                If dc.name = e.node.ParentNode.Text Then
                    Dim dr As DataRow
                    Dim s As String = dr(dc.name)
                    DataTables(tb).ReplaceFor(dc.name,e.NewText,"dr(dc.name) = \'" & pth(1) & "\'")
                End If
            Next
        Next
End Select
e.Node.Name = e.NewText

  


此主题相关图片如下:360截图20120911-001.jpg
按此在新窗口浏览图片

 

但红色那句通不过,意思是在表中找到目标列后,用e.NewText替换掉dc.name列中 = \'" & pth(1) & "\'的值,请指点

 

谢谢!


 


--  作者:czy
--  发布时间:2012/9/11 18:37:00
--  

这样?

 

DataTables(tb).ReplaceFor(dc.name,e.NewText,dr(dc.name) & " = \'" & pth(1) & "\'")


--  作者:czy
--  发布时间:2012/9/11 18:39:00
--  
DataTables(tb).ReplaceFor(dc.name,e.NewText,dr(dc.name) = & "\'" & pth(1) & "\'")

--  作者:zpx_2012
--  发布时间:2012/9/11 19:32:00
--  

还是不可以。同样的出错提示


--  作者:czy
--  发布时间:2012/9/11 19:58:00
--  
DataTables(tb.name)
--  作者:zpx_2012
--  发布时间:2012/9/11 20:57:00
--  

谢谢CZY,编码那里是通过了,但打开窗口后随便修改一个“币别”或“计量单位”下的值,也提示出错。

 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:项目分类更名更新旧数据问题.table

做了一个例子,请老师指点

 

谢谢!


--  作者:czy
--  发布时间:2012/9/11 21:24:00
--  
If e.NewText = "" Then
    e.Cancel = True
    Return
End If
Dim pth() As String = e.Node.FullPath.Split("\\")
Select Case e.node.Level
    Case 0
        DataTables("项目分类").ReplaceFor("项目名称",e.NewText,"项目名称 = \'" & pth(0) & "\'")
    Case 1
        DataTables("项目分类").ReplaceFor("罗列值",e.NewText,"项目名称 = \'" & pth(0) & "\' And 罗列值 = \'" & pth(1) & "\'")
        For Each tb As DataTable In DataTables
            For Each dc As DataCol In tb.DataCols
                If dc.name = e.node.ParentNode.Text Then
                    DataTables(tb.name).ReplaceFor(dc.name,e.NewText,dc.name & " = \'" & pth(1) & "\'")
                End If
            Next
        Next
End Select
e.Node.Name = e.NewText

--  作者:zpx_2012
--  发布时间:2012/9/11 21:45:00
--  

谢谢CZY版主,可以了。

只是这句 DataTables(tb.name).ReplaceFor(dc.name,e.NewText,dc.name & " = \'" & pth(1) & "\'")
后面的dc.name & " = \'" & pth(1) & "\'"  与  "dc.name  = \'" & pth(1) & "\'")  有什么不同,是不是凡是变量的就不用""括起来,
这种类似的问题真的好让我迷糊。

 

再次谢谢了。


--  作者:czy
--  发布时间:2012/9/11 22:02:00
--  

dc.name如果用引号就是字符,不加引号是变量值。

这行代码中多个地方用到变量,道理是一样的

DataTables(tb.name).ReplaceFor(dc.name,e.NewText,dc.name & " = \'" & pth(1) & "\'")

 

动态合成表达式是基础,所以建议你充分理会下面的帮助页面

 

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