如何使用 Vb.net 中的 Me.Controls 控制文本框的显示?
How can I control my textboxes' display using Me.Controls in Vb.net?
我的屏幕上有大约四个或更多文本框,但我将 false 设置为可见。
作为我的数据库 table 的结果(计数),我想显示文本框。
这是我的代码。
//my datatable list
Dim dl As List(Of String) = dt.Rows.Cast(Of DataRow).Select(Function(dr) dr(0).ToString).ToList
For i As Integer = 1 To dl.Count
Me.Controls("txtSrc" & i.ToString).Visible = True
Next
然后,我就出现了这样的错误。
InvalidCastException: String The conversion from "lblSrc1" to type'Integer' is invalid.
我该如何修复该错误?
注意;我正在使用 VS 2019<>
好的,不像说 VBA/VB6 - 也许 vb.net 桌面?
您收到类型转换错误,因为
Me.Controls()
想要一个数字(索引值)到控件集合中。
因此,您不能像在 VBA/Access/VB6
中那样使用字符串或“变量”来引用控件
因此,您的示例代码将变为:
For i As Integer = 1 To dt.Rows.Count
Dim Tbox As TextBox
Tbox = Me.FindControl("TextBox" & i)
Tbox.Visible = False
Next
另外,几乎没有(没有理由)将数据 table 转换成列表来获取行数,因为上面的数据 table 显示 .Rows.Count 是相同的值
所以
Dim dl As List(Of String) = dt.Rows.Cast(Of DataRow).Select(Function(dr) dr(0).ToString).ToList
dim MyRowCount1 as integer = dl.Count
dim MyRowCount2 as integer = dt.Rows.Count
以上两者都会产生相同的行计数值 - 因此您可以转储第一行混乱的代码以将 dt 转换为列表。不需要。
(因此,以上 RowCount1 和 RowCount2 将具有相同的值和相同的结果)
所以这应该可以解决问题:
For i As Integer = 1 To dt.Rows.Count
Dim Tbox As TextBox
Tbox = Me.FindControl("TextBox" & i)
Tbox.Visible = False
Next
首先,很抱歉我忘了说我有一个母版页。
所以我尝试了这种方式,它确实对我有用。谢谢
For i As Integer = 1 To dl.Count
Dim mpContentPlaceHolder As ContentPlaceHolder = CType(Master.FindControl("ContentPlaceHolder1"), ContentPlaceHolder)
Dim txt As TextBox = CType(mpContentPlaceHolder.FindControl("TextBox" & i), TextBox)
txt.Visible = True
Next
我的屏幕上有大约四个或更多文本框,但我将 false 设置为可见。 作为我的数据库 table 的结果(计数),我想显示文本框。 这是我的代码。
//my datatable list
Dim dl As List(Of String) = dt.Rows.Cast(Of DataRow).Select(Function(dr) dr(0).ToString).ToList
For i As Integer = 1 To dl.Count
Me.Controls("txtSrc" & i.ToString).Visible = True
Next
然后,我就出现了这样的错误。
InvalidCastException: String The conversion from "lblSrc1" to type'Integer' is invalid.
我该如何修复该错误?
注意;我正在使用 VS 2019<
好的,不像说 VBA/VB6 - 也许 vb.net 桌面?
您收到类型转换错误,因为
Me.Controls()
想要一个数字(索引值)到控件集合中。
因此,您不能像在 VBA/Access/VB6
中那样使用字符串或“变量”来引用控件因此,您的示例代码将变为:
For i As Integer = 1 To dt.Rows.Count
Dim Tbox As TextBox
Tbox = Me.FindControl("TextBox" & i)
Tbox.Visible = False
Next
另外,几乎没有(没有理由)将数据 table 转换成列表来获取行数,因为上面的数据 table 显示 .Rows.Count 是相同的值
所以
Dim dl As List(Of String) = dt.Rows.Cast(Of DataRow).Select(Function(dr) dr(0).ToString).ToList
dim MyRowCount1 as integer = dl.Count
dim MyRowCount2 as integer = dt.Rows.Count
以上两者都会产生相同的行计数值 - 因此您可以转储第一行混乱的代码以将 dt 转换为列表。不需要。 (因此,以上 RowCount1 和 RowCount2 将具有相同的值和相同的结果)
所以这应该可以解决问题:
For i As Integer = 1 To dt.Rows.Count
Dim Tbox As TextBox
Tbox = Me.FindControl("TextBox" & i)
Tbox.Visible = False
Next
首先,很抱歉我忘了说我有一个母版页。 所以我尝试了这种方式,它确实对我有用。谢谢
For i As Integer = 1 To dl.Count
Dim mpContentPlaceHolder As ContentPlaceHolder = CType(Master.FindControl("ContentPlaceHolder1"), ContentPlaceHolder)
Dim txt As TextBox = CType(mpContentPlaceHolder.FindControl("TextBox" & i), TextBox)
txt.Visible = True
Next