每次迭代数据表时都得到一个

时间:2014-01-16 05:40:53

标签: .net vb.net for-loop datatable

这是我目前的代码:

Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean
    For Each item In markerDtable.Rows
        If keyData = Keys.Space Then
            comboSearchMarker.Text = item("MarkerName") ' Gets the items in MarkerName field but I need only one at a time.
        End If
    Next
End Function

如果您运行此代码,它会在MarkerName字段中提供所有名称。无论如何,如果我再次按下SpaceKey,那么我怎么才能得到只有一个?对不起,我真的不知道。

2 个答案:

答案 0 :(得分:1)

问题是您使用For Each循环迭代所有项目。这就是为什么在按下SPACE时获得所有条目的原因。我想你的问题是如何记住你上次回复的那个条目: - )

您需要声明一个记住最后一个索引的静态变量:

Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean
    Static lastEntryReturned As Integer = 0
    If keyData = Keys.Space Then
        comboSearchMarker.Text = markerDTable.Rows(lastEntryReturned).Item("MarkerName")

        lastEntryReturned += 1
        If lastEntryReturned >= markerDTable.Rows.Count
            lastEntryReturned = 0
        End If
    End If
End Function

这会“记住”最后一个索引,直到下次调用该函数。由于局部变量为static,因此删除了对此函数外部的“全局”变量的需求。因此,在对函数的调用之间也是有效的。

答案 1 :(得分:0)

为此函数之外的位置声明变量。

Dim pos As Integer

然后在功能:

If (keyData = Keys.Space and pos < markerDtable.Rows.Count) Then
    pos += 1
    comboSearchMarker.Text = markerDtable.Rows(pos).Item("MarkerName")
End If