以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  查找单据编号第一次和最后一次出位的行  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=96925)

--  作者:bobolan521
--  发布时间:2017/3/2 14:53:00
--  查找单据编号第一次和最后一次出位的行
Dim Names As New List(Of String)
For Each r As Row In Tables(e.Form.name & "_table2").Rows
    If Names.Contains(r("单据编号"))= False Then
        Names.Add(r("单据编号"))
    End If
Next

Dim i,j As Integer
For Each nm As String In names
    For Each r As Row In Tables(e.Form.name & "_table2").Rows          
        If nm = r("单据编号") Then
            i=i+1
        End If
    Next
    MessageBox.Show(i)
Next

图片点击可在新窗口打开查看此主题相关图片如下:ccc.jpg
图片点击可在新窗口打开查看
这段代码可以弹出每一个单据编号最后一次出现的位置,请问一下老师我要弹出第一次出现的位置,代码要怎么修改
[此贴子已经被作者于2017/3/2 14:57:09编辑过]

--  作者:有点色
--  发布时间:2017/3/2 15:45:00
--  

Dim Names As New List(Of String)
For Each r As Row In Tables(e.Form.name & "_table2").Rows
    If Names.Contains(r("单据编号"))= False Then
        Names.Add(r("单据编号"))
    End If
Next

 

Dim i As Integer = 0
For Each nm As String In names
    For Each r As Row In Tables(e.Form.name & "_table2").Rows
        If nm = r("单据编号") Then
            msgbox("第一次" & r.Index)
            i=i+1
        End If
    Next
    MessageBox.Show("最后一次" & r.index)
Next


--  作者:bobolan521
--  发布时间:2017/3/3 13:15:00
--  
老师你给的写法不对啊,这样的话,每次都弹出来的,而不是只弹出第一次和最后一次
[此贴子已经被作者于2017/3/3 13:28:37编辑过]

--  作者:有点蓝
--  发布时间:2017/3/3 15:47:00
--  
Dim t As Table = Tables(e.Form.name & "_table2")
Dim Names As List(Of String) = t.DataTable.GetValues("单据编号",t.Filter)

Dim i As Integer = 0
For Each nm As String In names
    Dim idx As Integer = t.Find(nm,0,"单据编号",True,True,False)
    If idx > - 1 Then
        msgbox("第一次" & idx+1)
        For i = idx + 1 To t.Rows.Count - 1
            If nm <> t.Rows(i)("单据编号") Then
                msgbox("最后一次" & i)
                Exit For
            End If
        Next
    End If
Next

--  作者:有点色
--  发布时间:2017/3/3 17:27:00
--  

如果在原来的代码修改,参考

 

Dim Names As New List(Of String)
For Each r As Row In Tables(e.Form.name & "_table2").Rows
    If Names.Contains(r("单据编号"))= False Then
        Names.Add(r("单据编号"))
    End If
Next

 

Dim i As Integer = 0
For Each nm As String In names
    For Each r As Row In Tables(e.Form.name & "_table2").Rows
        If nm = r("单据编号") Then
            msgbox("第一次" & r.Index)
            i=i+1

            Exit for
        End If
    Next
    MessageBox.Show("最后一次" & r.index)
Next


--  作者:bobolan521
--  发布时间:2017/3/3 18:38:00
--  
谢谢老师,  For i = idx + 1 To t.Rows.Count - 1 这句应该改成   For i = idx + 1 To t.Rows.Count 要不然最后一个弹不出来的