Foxtable(狐表)用户栏目专家坐堂 → 用户自定义列表项目名称更改后如何更新表中引用过的数据


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

主题:用户自定义列表项目名称更改后如何更新表中引用过的数据

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


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
用户自定义列表项目名称更改后如何更新表中引用过的数据  发帖心情 Post By:2012/9/10 21:39:00 [显示全部帖子]

各位老师,如下问题请教:

 

为方便客户使用系统时自己可以设定一些常用的数据列表项目,我设计了如下一个窗口

其中的子节点客户可以自行增加及重命名,

 


图片点击可在新窗口打开查看此主题相关图片如下:360截图20120910-007.jpg
图片点击可在新窗口打开查看


 

在系统中的很多表的列的列表项目都用到了这些数据,如下

 


图片点击可在新窗口打开查看此主题相关图片如下:360截图20120910-008.jpg
图片点击可在新窗口打开查看

 

我的问题是:当客户重命名子节点的那些数据项目名称时,能否自动找出系统中所有用到该名称的列并自动更新成新的名称?

比如现在将“半成品仓”改为“二楼半成品仓”,原来在所有表中的仓库列录入的“半成品仓”如何自动更新为“二楼半成品仓”?

因为如果不更新,当统计汇总时就会出现很多不同的仓库出来。

 

谢谢!


 


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


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2012/9/10 22:48:00 [显示全部帖子]

主要就是更新表中原来已经录入的数据,列属性是不用的,是我在开发时设计用的。

 

但是因为“项目分类”窗口中有很多不同的类别的数据,每一种重新命名后要怎么样编写代码才能去寻找到哪个表中的哪个列有用到这个数据?

 

请两位老师再提示一下,我一点思路都没有,表及列都可以遍历,但怎么才知道是哪一列中在引用(即代码要怎么知道我设计时哪一列引用到了这些数据),

 

因为不可能说按文字来查找所有的列,如果其他不相关的列也有相同的文字那也被重新命名就错了。

 

我的意思是不同表中的列名不一定和我的项目分类的根目录是相同的名字(即项目分类中根目录是“计量单位”,但在表中引用的那一列名称可能是

 

“单位”),当然如果是每个表中引用的列名都统一成与项目分类中的根目录相同的名字,那样当然就容易多了。

[此贴子已经被作者于2012-9-10 23:00:43编辑过]

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


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2012/9/10 23:04:00 [显示全部帖子]

因为不可能说按文字来查找所有的列,如果其他不相关的字符列也有相同的文字那也被重新命名就错了。

 

我的意思是不同表中的列名不一定和我的项目分类的根目录是相同的名字(即项目分类中根目录是“计量单位”,但在表中引用的那一列名称可能是

 

“单位”),当然如果是每个表中引用的列名都统一成与项目分类中的根目录相同的名字,那样当然就容易多了。


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


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2012/9/11 0:08:00 [显示全部帖子]

谢谢CZY,我考虑了一下,还是决定将相关表中的列名称都统一成项目分类中的根节点名称,这样代码很容易就通用,不然比如“计量单位”很多表中都引用到,那还要在编码时针对每一项都把引用到的表及列列举出来,太麻烦了。谢谢!

 


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


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2012/9/11 16:04: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
                    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) & "'的值,请指点

 

谢谢!



[此贴子已经被作者于2012-9-11 16:08:34编辑过]

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


加好友 发短信
等级:四尾狐 帖子:976 积分:8527 威望:0 精华:0 注册:2012/2/9 16:35:00
  发帖心情 Post By:2012/9/11 17:01:00 [显示全部帖子]

谢谢!我是意思是如果If dc.name = e.node.ParentNode.Text then 成立
则在该列的某一行中的值等于'" & pth(1) & "'"才替换,我是用dr(dc.name) = '" & pth(1) & "'来表示这个意思,

你的意思是不是dc.name & " = '" & pth(1) & "'"就表示该列的所有值,我以为dc.name 只是表示该列的名称而已。

 

但像你写的那样还是出错



 


 回到顶部