查找和循环标签

时间:2015-09-09 14:24:34

标签: asp.net vb.net

运行VS 2013 VB.net。

我的aspx页面上有3个标签,分别标记为label1,label2和label3。

我想遍历后面代码中的每一个并为它们分配值。

这是我的代码

Dim X As Integer = 1

For Each obj In values

    Dim myLabel As Label
    myLabel = TryCast(Me.FindControl("Label" + X), Label)
    myLabel.Text = Math.Round(obj, 2)

    X = X + 1

Next

我知道只有3个obj,所以x总是在1到3之间。我做错了,因为我得到了以下内容。

  

从字符串“Label”到“Double”类型的转换无效

如果我将(“label”+ x)更改为(“label1”),我会

  

对象引用未设置为对象的实例。

在下面一行。

2 个答案:

答案 0 :(得分:2)

你想连接不计算的字符串,在VB.NET中你使用&而不是+(而不是C#)。所以这应该有效:

myLabel = TryCast(Me.FindControl("Label" & X), Label)

您还应将Option Strict设置为On,无一例外。然后,您首先必须修复许多编译器错误,但它将有助于编写更强大的代码。这不会编译:

myLabel.Text = Math.Round(obj, 2)

因为Math.Round返回DoubleLabel.TextString。您只需使用Math.Round(obj, 2).ToString()来修复它。

以下是使用Linq获取标签的不同方法:

Dim myLabels = From lbl In Me.Form.Controls.OfType(Of Label)()
               Where lbl.ID.StartsWith("Label")
For Each lbl As Label In myLabels
    ' ... '
Next

答案 1 :(得分:0)

此外,由于您在使用之前使用TryCast检查了您的变量 - 如果它没有进行投射,它将是Nothing。

myLabel = TryCast(Me.FindControl("Label" & X.ToString), Label)
If myLabel IsNot Nothing Then
  'safe to use variable here
End If