我的螢屏上有大約四個或更多文本框,但我將 false 設定為可見。作為我的資料庫表的結果(計數),我想顯示文本框。這是我的代碼。
//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<<ASP.NET 網路表單(使用 VB.NET)>>
uj5u.com熱心網友回復:
好的,不像說 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
此外,幾乎沒有(沒有理由)將資料表轉換為串列來獲取行數,因為上面的資料表顯示 .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
uj5u.com熱心網友回復:
首先,很抱歉我忘了說我有一個母版頁。所以我嘗試了這種方式,它確實對我有用。謝謝。
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/415380.html
標籤:
