我有一个网格视图,其中包含一个包含字符串的列(中间列)。
在rowDataBound
事件中,我想遍历列,查找它包含的整数,然后在第一列中显示一个值。
我知道整数范围是1到63,所以我可以使用FOR loop
来遍历数字。这是我到目前为止所拥有的。
For x As Integer = 1 To 63
If CType(e.Row.Cells(2).FindControl("lblTagName"), Label).Text Then
End If
Next
我遇到的问题是使用contains
。我不能使用以下内容,因为x = 1
时数字1,10,11等也是如此。
For x As Integer = 1 To 63
If CType(e.Row.Cells(2).FindControl("lblTagName"), Label).Text.Contains(x) Then
End If
Next
如何确保每个号码只能获得一个结果?即x = 6
将返回UMIS.75OPTR6GROSSMARGIN.F_CV,而不是包含数字6的所有其他字符串。
更新 - 根据一些答案,我可能没有很好地解释这一点。我想循环遍历gridview,如果找到数字1,而第二列中只有数字1,而不是10等,那么我想显示"运行1"在第一列。因此,当x = 10时,它将显示" Run 10"等等。
更新2 - 我的解释,道歉。
结果网格视图将如下所示。
第二列的顺序未设置且不按顺序排列。
答案 0 :(得分:1)
您必须检查标签的整个文本,以确定它是否仅1
,而不是10, 11, 12, 13, ...
。
此外,在这种情况下,您应该使用DirectCast
而不是CType
。 CType
仅在转换为包含转换运算符的 不同 类型时使用,此处您始终处理标签。
For x As Integer = 1 To 63
If String.Equals(DirectCast(e.Row.Cells(2).FindControl("lblTagName"), Label).Text, "UMIS.75OPTR" & x & "GROSSMARGIN.F_CV", StringComparison.OrdinalIgnoreCase) Then
'Do your stuff.
End If
Next
答案 1 :(得分:1)
你可能想要考虑是否采取相反的方式。使用正则表达式匹配获取字符串中的数字列表。
Dim s As String = "asd12asdasd.sdf3sdf"
For Each m As System.Text.RegularExpressions.Match In System.Text.RegularExpressions.Regex.Matches(s, "[\d]*")
If m.Success AndAlso Not String.IsNullOrEmpty(m.Value) Then
' m.Value
End If
Next
使用该数字列表,您可以检查它是否在1到63之间。
如果您的字符串具有相同的后缀/前缀,只需删除它们即可显示该数字是什么。
Dim s As String = "UMIS.75OPTR12GROSSMARGIN.F_CV"
Dim number As String = s.Replace("UMIS.75OPTR", "").Replace("GROSSMARGIN.F_CV", "")
答案 2 :(得分:0)
在Do Until循环中向后退:
Dim bolFoundMatch As Boolean = False
Dim intCursor As Integer = 63
Do Until (bolFoundMatch OrElse intCursor = 0)
If CType(e.Row.Cells(2).FindControl("lblTagName"), Label).Text.Contains(intCursor) Then
'Anything you want to do when you find your match.
'This will ensure your loop exits.
bolFoundMatch = True
End If
intCursor -= 1
Loop