以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]判断不出末级节点 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=68084) |
||||
-- 作者:chnfo -- 发布时间:2015/5/9 10:06:00 -- [求助]判断不出末级节点 希望通过列C的层级判断是否为末级节点,为什么不行呢? A表中有两列C(字符),T(逻辑)——用于标识这个节点是否为末级节点 在A表的datacolchanged事件中这样写: Select Case e.DataCol.Name Case "C" For Each dr As DataRow In e.DataTable.DataRows Dim cs As DataRow = e.DataTable.Find("C like \'" & dr("C") & "*\'") If cs IsNot Nothing Then dr("T") = False Else dr("T") = True End If Next End Select 执行之后,结果是这样的。这是为什么呢?初步判断是上面的蓝色字体有问题,请教各位,问题出在哪里?因为传不上附件,考虑只有一个表,直接截取界面了。 示例如下: C
T 01
False 0101
False 010101
False 010102
False 0102
False 0103
False 02
False 0201
False 020101
False 020102
False |
||||
-- 作者:Bin -- 发布时间:2015/5/9 10:10:00 -- Select Case e.DataCol.Name Case "C" Dim cs As DataRow = e.DataTable.Find("C like \'" & dr("C") & "*\'","C Desc") If cs IsNot Nothing Then cs("T") = True End If End Select
[此贴子已经被作者于2015/5/9 10:10:14编辑过]
|
||||
-- 作者:chnfo -- 发布时间:2015/5/9 10:30:00 -- 貌似还是有点问题。因为任意一行的修改都可能导致另外的节点成为非末级节点。 所以,我觉得需要遍历。问题是修改之后执行还是有问题 |
||||
-- 作者:Bin -- 发布时间:2015/5/9 10:44:00 --
|
||||
-- 作者:chnfo -- 发布时间:2015/5/9 10:55:00 -- 重置C列会出错滴,BIN兄。 此行已从表中移除并且没有任何数据。BeginEdit() 将允许在此行中创建新数据 用SQL…………,这个………… Select Case e.DataCol.Name Case "C" For Each dr As DataRow In e.DataTable.Datarows \'当C列的值发生变化时, Dim cs As DataRow = e.DataTable.Find("C like \'" & dr("C") & "*\'") \'如果在表中找到C值与当前遍历行相似且以当前遍历行C值开头的行,则说明当前遍历行不是末级节点,否则当前遍历行就是末级节点 If cs IsNot Nothing Then dr("T") = False Else dr("T") = True End If Next End Select 并且,如果我将0102改为01.02,然后把"C like \'" & dr("C") & "*\'"改为"C like \'" & dr("C") & ".*\'" 执行重置C列就完全没有问题,可以看到该标记为末级节点的都标记成功。并且修改任意一行的C值,会重新标记所有列的T
[此贴子已经被作者于2015/5/9 10:58:25编辑过]
|
||||
-- 作者:Bin -- 发布时间:2015/5/9 10:59:00 -- .
|
||||
-- 作者:chnfo -- 发布时间:2015/5/9 11:02:00 -- 01
False 0101
False 010101
True ‘如果我将第四行修改为01010101,那么这一行应当标记为false才对’ 01010101
True 这就是我所说的只更新某一行是不行的,某一行的C值改变可能导致其它行成为非末级节点。
[此贴子已经被作者于2015/5/9 11:02:46编辑过]
|
||||
-- 作者:Bin -- 发布时间:2015/5/9 11:09:00 -- 要更新以前的话,除开遍历也没啥好办法,但是遍历数据量大会非常耗时.你要是点个重置列,没个十几分钟我看不行. 如果数据量少,直接肉眼就能看出那个是末端了. 根本无需判断啊. 建议你做个按钮.点击显示当前末端节点,这样效率高. |
||||
-- 作者:chnfo -- 发布时间:2015/5/9 11:15:00 -- 正常情况下,是直接在EXCEL等中做好了之后,直接复制进来的,一般不会改。 实在是怕用户破坏性操作。 关键问题是,我不太明白为什么运行附件中的D和F表的重置C列,D表会执行,F表不会执行,难道like做判断必须要用分隔符?
[此贴子已经被作者于2015/5/9 11:15:49编辑过]
|
||||
-- 作者:Bin -- 发布时间:2015/5/9 11:20:00 -- .
|