有人可以教我如何为每个标签指定一个同名的值吗? 例如,我有一个名为label1的10标签,直到label10。在每个标签上,我想显示sql的不同值。这是我的代码。
Dim sqlCmd As New SqlCommand("select distinct top 15 Machine_no from table5 ", conn)
Dim sqlDa As New SqlDataAdapter(sqlCmd)
sqlDa.Fill(dt)
If dt.Rows.Count > 0 Then
For i As Integer = 0 To dt.Rows.Count
lblMachine1.text = dt.Rows(0)("Machine_no").ToString)
lblMachine2.Text = dt.Rows(1)("Machine_no").ToString
lblMachine3.Text = dt.Rows(2)("Machine_no").ToString
lblMachine4.Text = dt.Rows(3)("Machine_no").ToString
lblMachine5.Text = dt.Rows(4)("Machine_no").ToString
lblMachine6.Text = dt.Rows(5)("Machine_no").ToString
lblMachine7.Text = dt.Rows(6)("Machine_no").ToString
lblMachine8.Text = dt.Rows(7)("Machine_no").ToString
lblMachine9.Text = dt.Rows(8)("Machine_no").ToString
lblMachine10.Text = dt.Rows(9)("Machine_no").ToString
lblMachine11.Text = dt.Rows(10)("Machine_no").ToString
lblMachine12.Text = dt.Rows(11)("Machine_no").ToString
lblMachine13.Text = dt.Rows(12)("Machine_no").ToString
lblMachine14.Text = dt.Rows(13)("Machine_no").ToString
lblMachine15.Text = dt.Rows(14)("Machine_no").ToString
Next
End If
问题是,例如,当第5行中没有数据时,系统会给出错误。
答案 0 :(得分:0)
欢迎来到网站!
在我们解决您的问题之前,我想指出:
"问题是,例如,当行5中没有数据时,系统会 给出错误。"
过于宽泛,无法真正识别您的问题。
同时包含您收到的错误消息会非常有帮助。
关于您的真实问题,可以使用DirectCast
缩短您的代码。你可以尝试这个:
If dt.Rows.Count > 0 Then
For i = 0 To dt.Rows.Count - 1
DirectCast(Controls.Find("lblMachine" & i + 1, True)(0), Label).Text = dt.Rows(i).Item("MachineNo").ToString
Next
End If
在您的代码中使用For Loop
是一个良好的开端,但您根本没有对它进行集成。在上面的代码中,您可以看到i
的使用方式。
同样dt
是DataTable
对吗? DataTables
为index-based
,因此它以zero(0)
开头。这就是为什么您可以在For Loop
语句中注意到dt.Rows.Count - 1
。
希望它有所帮助。
答案 1 :(得分:0)
您使用i
作为循环变量,但不是用来引用标签。
您可以尝试将标签放在一个数组中,然后按索引将它们匹配到一行,如下所示:
Dim labels = {lblMachine1, lblMachine2, lblMachine3, lblMachine4,...}
Dim sqlCmd As New SqlCommand("select distinct top 15 Machine_no from table5 ", conn)
Dim sqlDa As New SqlDataAdapter(sqlCmd)
sqlDa.Fill(dt)
If dt.Rows.Count > 0 Then
For i As Integer = 0 To dt.Rows.Count -1
dim row= dt.rows(i)
labels(i).text = row("Machine_no")
Next
End If
你也可以使用FindControl for windows formas @Allen指出。但是当使用Web时,您需要实现一个递归版本,因为您正在寻找的控件通常嵌套在其他控件中。
private FindControlRecursive(control parent, string id) as control
if parent.id=id then return parent
for each child in parent.controls
control result = FindControlRecursive(child, id)
if not result is nothing then return result
next
end function
然后在你的代码中:
Dim sqlCmd As New SqlCommand("select distinct top 15 Machine_no from table5 ", conn)
Dim sqlDa As New SqlDataAdapter(sqlCmd)
sqlDa.Fill(dt)
If dt.Rows.Count > 0 Then
For i As Integer = 0 To dt.Rows.Count -1
fincontrolrecursive("lblMachine" + i).text = dt.rows(i)("Machine_no")
Next
End If
答案 2 :(得分:0)
也尝试搜索: 每个控制循环的Vb.net
您很可能必须使用List(Of Label)
这是我的看法。未经测试。
Dim machList As List(Of Label) = New List(Of Label)
For Each label As Label In GroupBox1.Controls
machList.Add(label)
Next label
For row As Integer = 0 To dt.Rows.Count
If dt.Row(row) <> Nothing Then
machList.Index(row).Text = dt.Rows(row)
End If
Next row