以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  插入行后序号不对  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=99721)

--  作者:skyman1188
--  发布时间:2017/4/25 16:36:00
--  插入行后序号不对
For Each dr As DataRow In DataTables("计算表").DataRows
    Sum = Sum + 1
      dr("序号") = Sum
Next
如果是新增行,序号显示是没有问题的,插入行,序号就不按照从上往下顺序显示了,插入的行序号最大,这个问题怎么解决。

--  作者:有点色
--  发布时间:2017/4/25 16:50:00
--  
For Each dr As row In Tables("计算表").Rows 
    dr("序号") = dr.index+1
Next

--  作者:skyman1188
--  发布时间:2017/4/25 22:35:00
--  我的意思是按照实际表格来遍历

For Each dr As DataRow In DataTables("成本计算表").DataRows
    If Sum < 8 Then
    Sum = Sum + 1
dr("序号") = Sum
Else
Sum = 1
dr("序号") = Sum
End If
Next
我的意思是序号1-8循环这种情形,插入一行后,序号就乱了,不知道是不是有这种按照实际显示表格一行一行往下遍历?

--  作者:有点蓝
--  发布时间:2017/4/25 22:48:00
--  
DataRowAdded事件

Dim t As Table = Tables(e.DataTable.Name)
Dim idx As Integer = t.FindRow(e.DataRow)
If idx = 0 Then
    e.DataRow("序号") = 1
ElseIf idx > 0
    e.DataRow("序号") = t.Rows(idx-1)("序号")+1
    If e.DataRow("序号") = 9 Then e.DataRow("序号") = 1
End If

Dim s As Integer = e.DataRow("序号")
For i As Integer = idx + 1 To t.Rows.Count - 1
    If s < 8 Then
        s += 1
    Else
        s = 1
    End If
    t.Rows(i)("序号") = s
Next

--  作者:skyman1188
--  发布时间:2017/4/25 23:02:00
--  还是有点晕
项目一
1.
2.
3.
项目二
1.
2.
3.
如果在项目一的3.之前插入一行应该变为
项目一
1.
2.
3.
4.
项目二
1.
2.
3.
但是按照遍历结果如下了
项目一
1.
2.
4.
3.
项目二
1.
2.
3.
我希望遍历是按照表格显示的行号来,该怎么做

--  作者:有点蓝
--  发布时间:2017/4/25 23:05:00
--  
贴出你的代码
--  作者:skyman1188
--  发布时间:2017/4/25 23:10:00
--  插入行在遍历时候在最后了
For Each dr As DataRow In DataTables("成本计算表").DataRows
    dr = DataTables("成本计算表").DataRows(Sum) \'引用行
    If dr("项目名称") Like "●*" Then
        Sum1 = 0
        Sum2 = 0 \'项目数
        dr("序号") = ""
    Else
        If dr("项目名称") = Nothing Then
        dr("序号") = ""
        Else
            Sum2 = Sum2 +1 
            dr("序号") = Sum2 & "."
        End If
    End If
    Sum = Sum + 1
Next

--  作者:skyman1188
--  发布时间:2017/4/25 23:17:00
--  这样看起来简便一点
For Each dr As DataRow In DataTables("成本计算表").DataRows
    dr = DataTables("成本计算表").DataRows(Sum) \'引用行
    If dr("项目名称") Like "●*" Then
        Sum1 = 0
        dr("序号") = ""
    Else
        Sum1 = Sum1 +1 
        dr("序号") = Sum1 & "."
    End If
    Sum = Sum + 1
Next

我的感觉是dr = DataTables("成本计算表").DataRows(Sum) 这个有问题,就是插入行后,序号要插入,而不是按照最后一行的数字插入在这里

--  作者:skyman1188
--  发布时间:2017/4/25 23:22:00
--  
●主
1.
2.
5.
3.
4.

这个5.就是刚插入的行,我希望插入后是如下表个

●主
1.
2.
3.
4.
5.


--  作者:有点色
--  发布时间:2017/4/26 9:17:00
--  

改为

 

For Each dr As DataRow In DataTables("成本计算表").Select("", "_Sortkey")
    If dr("项目名称") Like "●*" Then
        Sum1 = 0
        dr("序号") = ""
    Else
        Sum1 = Sum1 +1
        dr("序号") = Sum1 & "."
    End If
Next

[此贴子已经被作者于2017/4/26 9:17:43编辑过]