以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]行的前移后移在筛选状态下如何进行?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=62722)

--  作者:sensen9025
--  发布时间:2015/1/7 9:24:00
--  [求助]行的前移后移在筛选状态下如何进行?

狐爸,

表中的行上移和下移在筛选状态时,处理起来是不是比较麻烦?我用下面的代码,处理下移会出错,执行后当前行被移到最后,并没有按sort字段排序,

同样的代码,在上移中(少 DESC)却是可以正常执行。

Dim tb As Table = Tables("w_set_table")
If  tb.Position<tb.Rows.Count-1 Then

    tb.Sort=""
    \'tb.current.move(tbl.Position + 1) \'向下移动一行
    tb.current("II0")=tb.current("II0")+1
    tb.Sort="II0,id DESC"
End If

 

Dim tb As Table = Tables("w_set_table")
tb.Sort=""
If  tb.Position>=0 Then
    \'tb.current.move(tb.Position - 1) \'向上移动一行
    tb.current("II0")=tb.current("II0")-1
    tb.Sort="II0,id"
End If

 

为什么会这样呢?怎么处理才好。

谢谢!

[此贴子已经被作者于2015-1-7 9:33:43编辑过]

--  作者:Bin
--  发布时间:2015/1/7 9:28:00
--  
你这反复排序是什么意思?



--  作者:Bin
--  发布时间:2015/1/7 9:32:00
--  
你说下你的需求,你上要实现什么.  为什么要这也反复排序.浪费性能不说,还有奇怪的错误发生.
--  作者:sensen9025
--  发布时间:2015/1/7 9:38:00
--  

需求很简单啊,就是让表里的某一行上移一行或下移一行,前提是这个表是有排序的。所以要用tb.current.move(tbl.Position + 1) \'向下移动一行,在有排序的时候,这命令好像不能用。

我先取消排序,然后给排序的字段赋值,再恢复排序。

除此之外,还有什么更好的办法?


--  作者:Bin
--  发布时间:2015/1/7 9:42:00
--  
如果是这样,你无需取消排序

tb.current("II0")=tb.current("II0")+1
    tb.Sort="II0,id DESC"

直接这样操作一次即可   有问题的话,就传个例子上来我看看

--  作者:有点甜
--  发布时间:2015/1/7 9:46:00
--  
 上移下移,不是加1减1啊,是交换上下行的排序的值啊。
--  作者:sensen9025
--  发布时间:2015/1/7 9:47:00
--  

这还要传例子吗?这么简单的东西,在一个有筛选的表里,你怎么移动表里的行?

这种表的记录一般不多,所以不用考虑性能浪费的问题。


--  作者:Bin
--  发布时间:2015/1/7 9:49:00
--  
看 5 6楼.
--  作者:sensen9025
--  发布时间:2015/1/7 9:50:00
--  

我用的筛选字段ii0下移,就是+1后,就和下一条的ii0一样,这样两个ii0一样的,排序时不见得刚才移动的行会排到后面去,如果排前面,那么刚才要移动的行,实际上是没动。

我加了一个ID就是为了避免这种情况,但是似乎起不到作用。

[此贴子已经被作者于2015-1-7 9:50:54编辑过]

--  作者:Bin
--  发布时间:2015/1/7 9:56:00
--  
要互相交换
dim c as integer = tb.current("II0")
dim r = tb.rows(tb.current.index+1)("II0")
tb.current("II0")=r("II0")
r("II0")=c