【发布时间】:2020-10-08 02:12:34
【问题描述】:
我在一个 flowlayoutpanel 中有一组三个面板。 Panel1 包含名为 title1、city1、state1 等的文本框控件。 panel2 控件将分别命名为 title2、city2、state2,panel3 也是如此。
我的目标是从每个面板中的所有文本框中收集所有 .text 属性,并使用 INSERT 命令将它们存储在数据库中。
我的代码如下所示:
Dim i As Integer = 1
Do
connection.Open()
cmd = New SqlCommand(Insert, connection)
cmd.Parameters.AddWithValue("@user_id", My.Settings.CurrentUserID)
cmd.Parameters.AddWithValue("@title", ("title" + i.ToString))
cmd.Parameters.AddWithValue("@job_status", " ")
cmd.Parameters.AddWithValue("@jobnumber", i)
cmd.Parameters.AddWithValue("@employer", ("employer" + i.ToString))
cmd.Parameters.AddWithValue("@city", ("city" + i.ToString))
cmd.Parameters.AddWithValue("@state", ("state" + i.ToString))
cmd.Parameters.AddWithValue("@startdate", ("startdate" + i.ToString))
cmd.Parameters.AddWithValue("@enddate", ("enddate" + i.ToString))
cmd.Parameters.AddWithValue("@jobinfo", ("jobinfo" + i.ToString))
cmd.ExecuteNonQuery()
i = i + 1
connection.Close()
Loop Until i = 4
这个循环工作正常,在表中插入 3 行值,但它实际上插入的是字符串(title1,title2),而不是名为 textbox 的字符串的 .Text 属性
我尝试寻找将字符串转换为控件名称的方法,但找不到任何适合我的方法
或者,我尝试这样做:
cmd.Parameters.AddWithValue("@title", ("title" + i.ToString).text)
但它给了我这个错误:
“文本”不是成员“字符串”
通过执行一堆 If 语句并为每个文本框名称手动编写代码,很难实现我的目标,但现在,我正尽可能有效地做到这一点。
期待您的建议!
编辑:按照@JoelCoehoorn 解决方案,我能够解决我的问题
cmd = New SqlCommand(Insert, connection)
cmd.Parameters.Add("@user_id", SqlDbType.Int).Value = My.Settings.CurrentUserID
cmd.Parameters.Add("@title", SqlDbType.VarChar, 100)
cmd.Parameters.Add("@job_status", SqlDbType.VarChar, 20).Value = " "
cmd.Parameters.Add("@jobnumber", SqlDbType.Int)
cmd.Parameters.Add("@employer", SqlDbType.VarChar, 100)
cmd.Parameters.Add("@city", SqlDbType.VarChar, 100)
cmd.Parameters.Add("@state", SqlDbType.Char, 100)
cmd.Parameters.Add("@startdate", SqlDbType.VarChar, 20)
cmd.Parameters.Add("@enddate", SqlDbType.VarChar, 20)
cmd.Parameters.Add("@jobinfo", SqlDbType.VarChar, 1000)
connection.Open()
For i As Integer = 1 To 3
Dim pnl As System.Windows.Forms.Panel = CType(FlowLayoutPanel2.Controls($"WorkPanel{i}"), Control)
Dim targetBox As TextBox
Dim datepicker As DateTimePicker
targetBox = CType(pnl.Controls($"title{i}"), Control)
cmd.Parameters("@title").Value = targetBox.Text
cmd.Parameters("@jobnumber").Value = i
targetBox = CType(pnl.Controls($"employer{i}"), Control)
cmd.Parameters("@employer").Value = targetBox.Text
targetBox = CType(pnl.Controls($"city{i}"), Control)
cmd.Parameters("@city").Value = targetBox.Text
targetBox = CType(pnl.Controls($"state{i}"), Control)
cmd.Parameters("@state").Value = targetBox.Text
datepicker = CType(pnl.Controls($"startdate{i}"), Control)
cmd.Parameters("@startdate").Value = datepicker.Value
datepicker = CType(pnl.Controls($"enddate{i}"), Control)
cmd.Parameters("@enddate").Value = datepicker.Value
targetBox = CType(pnl.Controls($"jobinfo{i}"), Control)
cmd.Parameters("@jobinfo").Value = targetBox.Text
cmd.ExecuteNonQuery()
Next
【问题讨论】:
-
您需要将控件分配给三个控件数组,然后您可以使用索引器遍历这些数组。 Hans Passant 对this question 的回答应该会为您指明正确的方向。
-
@JonathanWillcock,感谢您的评论!我知道可以创建一个控件数组,但是如果使用数组,我仍然对如何索引每个文本框感到困惑。
标签: vb.net visual-studio