以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [分享]插入行的代码  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=5110)

--  作者:ssqq
--  发布时间:2009/11/23 21:48:00
--  [分享]插入行的代码
Dim dt As String = CurrentTable.Name
Dim cname As String = "InsertRowTemp"
If DataTables(dt).DataCols.Contains(cname) = False Then
   Datatables(dt).DataCols.Add(cname,GetType(Double))
   Tables(dt).Cols(cname).Visible = False
End If
Dim ds As Integer = DataTables(dt).DataRows.Count
Dim r As Integer
For r = 0 To ds-1
    Tables(dt).Rows(r)(cname) = r+1
Next
Dim i As Integer = CurrentTable.Position
If i < 0 Then
    CurrentTable.AddNew()
ElseIf i = 0 Then
    Dim v As Double = CurrentTable.Current(cname) - 1
    CurrentTable.AddNew()(cname) = v
Else
    Dim v1 As Double = CurrentTable.Current(cname)
    Dim v2 As Double = CurrentTable.Rows(CurrentTable.Position - 1)(cname)
    CurrentTable.AddNew()(cname) = (v1+v2) / 2
End If
CurrentTable.Sort = cname
CurrentTable.Position = i

--  作者:实话实说
--  发布时间:2009/11/24 6:04:00
--  
有个问题,插入后,如果重新排序后如何恢复呢,我测试了一下,插入后重新排序,将插入顺序打乱,再按升序或降序或取消都不能回到插入的顺序状态
--  作者:ssqq
--  发布时间:2009/11/24 9:10:00
--  
插入排序是按照隐藏列“InsertRowTemp”的顺序排列,如果在打乱前没有再次插入,可使用此字段恢复排序。表中唯一可以无限向前恢复的字段就是_identify,但此字段是按照添加次序排序,不能保存插入顺序。插入顺序本来就是为了方便手工排序而定义的功能,不适合代码再次恢复排序
--  作者:yangming
--  发布时间:2009/11/24 10:03:00
--  
其实,如果想保持插入前排序,只要增加一个辅助列,在插入前清空此列内容,重新加入一个序列数就可以,当然,这只能是一次恢复,不可能保持N次的
--  作者:易服
--  发布时间:2009/11/24 10:09:00
--  
保存后重新打开原来插入的行排在最后一行,这与增加行没有什么区别,因此插入行没有太大的意义
--  作者:实话实说
--  发布时间:2009/11/24 11:16:00
--  
我觉得这个插入按钮还是好用,为了保存插入的顺序,可以做个恢复按钮:Tables(“表A”).Sort = "InserRowTemp",只是要针对不同的表设计这个按钮