2017-02-21 13 views
0

文字列(中列)を含む列を持つグリッドビューがあります。私はそれが最初の列の値を表示し、その後含まれており、整数を探して列をループしたいrowDataBoundイベントで文字列に特定の整数が含まれているかどうかを確認します。

Gridview

私はFOR loopを使って数字をループすることができるので、整数の範囲は1から63までです。ここまで私がこれまで持っていたことがあります。

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 

数値ごとに1つの結果しか得られないことを確認する方法を教えてください。すなわちx = 6はUMIS.75OPTR6GROSSMARGIN.F_CVを返し、数字6を含む他の文字列はすべて返しません。

UPDATE - いくつかの回答に基づいて私はこれについて非常にうまく説明できません。私は、gridviewをループしたいと思います。数字1が見つかった場合には、10などではなく2番目の列の数字1だけが最初の列に「Run 1」と表示されます。したがって、x = 10の場合は「Run 10」と表示されます。

更新2 - その明確な説明、謝罪。

結果のグリッド表示は次のようになります。

Resultant gridview

第二カラムの順序が設定されていないと順序ではありません。

+0

私の更新された回答を参照してください。 –

答えて

1

をあなたはそれが同様にのみ1はなく、10, 11, 12, 13, ...であるかどうかを判断するためにラベルの全体テキストをチェックする必要があると思います。

さらに、CTypeではなくDirectCastを使用する必要があります。 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 
+0

混乱のために申し訳ありません – Silentbob

+0

@Silentbob:問題はありませんあなたのコードでやりたいことを他の人に説明するのは難しいです:)。お役に立てて嬉しいです! - また、 'StringComparison.OrdinalIgnoreCase'を使用しているので、マッチは大文字と小文字を区別しません。したがって、同じ文字である限り、ラベルのテキストがたとえば 'umis.75opTr6grOSsmargIN.F_Cv'であるかどうかは関係ありません。 –

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

確かにintcursor = 1の場合は61で停止しますが、1に移動したい場合は – Silentbob

+0

です。そのため、逆方向に移動します。 61は1になる前にループを止めるでしょう。 – N0Alias

+0

しかし、彼はそれを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", "") 
+0

Regexの例では、文字列が "UMIS。** 75 **"で始まることに注意してください。 –

関連する問題