2017-02-21 113 views
0

我有一个网格视图,其中有一个包含字符串的列(中间列)。检查字符串是否包含特定整数

Gridview

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”等等。

UPDATE 2 - 它的definatley我的解释,道歉。

生成的网格视图看起来像这样。

Resultant gridview

第二列的次序不被设置并且不是为了。

+0

查看我的更新回答。 –

回答

1

你不得不检查整个文本的标签,以确定它是否是唯一的1,而不是10, 11, 12, 13, ...为好。

此外,在这种情况下,您应该使用DirectCast而不是CTypeCType仅用于转换为不同包含转换运算符的类型,在这里您总是处理标签。

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 
+0

感谢抱歉的困惑 – Silentbob

+0

@Silentbob:没问题,有时候很难向别人解释你想要用你的代码做什么:)。很高兴我能帮上忙! - 另外请注意,因为我使用的是StringComparison.OrdinalIgnoreCase,所以匹配不区分大小写。因此,如果标签的文字是“umis.75opTr6grOSsmargIN.F_Cv”,只要它们是相同的字符,则无关紧要。 –

0

去向后一做,直到循环:

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 
+0

当然,如果intcursor = 1,那么它会停在61,而我想去1 – Silentbob

+0

这就是为什么我会倒退。 61会在回到1之前停止循环。 – N0Alias

+0

但是他希望它从_和__开始,而不是相反。 –

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", "") 
+0

对于正则表达式示例,请记住,他的字符串以“UMIS。** 75 **”开头。 –

相关问题