【问题标题】:How to save data into database from dynamically created text boxes如何从动态创建的文本框中将数据保存到数据库中
【发布时间】:2019-08-10 17:23:29
【问题描述】:

我在 flowlayout 面板上动态创建了文本框。文本框可以是任意数字。我正在尝试将这些值(整数)从文本框中保存到数据库中。我需要一天的时间才能实现这一目标,顺便说一句,我是新手。请指导我如何实现这一目标。太感谢了。我尝试保存到 List(Of...) 集合中,但它只返回最后一个值。这就是我试图实现这一点的方法。我在另一个名为 clsHelper 的类中声明了 List 类型的共享列表。

Private Sub saveIntoList(flp As FlowLayoutPanel)
    clsHelper.list = New List(Of String)
    For Each tb in flp.Controls
        If TypeOf tb Is TextBox Then
            txtNo = DirectCast(tb,TextBox)
            If txtNo.Name = "txtNo" Then
                clsHelper.list.Add(txtNo.Text)
            End If
        End If
    Next
End Sub

FlowLayoutPanel with six text boxes

【问题讨论】:

  • 改写你的问题,这样实际问题的部分就更清楚了。
  • 我很想知道,一旦你得到一个不确定长度的列表,可能是数字也可能不是数字的字符串,如何将其保存到数据库中?
  • 您不需要If TypeOf tb Is TextBox Then,因为您可以在For Each 语句中过滤:For Each tb in flp.Controls.OfType(Of TextBox)()
  • 创建文本框后,您可以将对它们的引用保存在 List(Of TextBox) 中。然后,您只需要在要保存数据时遍历该列表。
  • 非常感谢您指导我。我跟着它,它现在已经解决了。

标签: vb.net


【解决方案1】:

问题可能是这个If 声明。只有名称为"txtNo"TextBox 的内容才会添加到您的list。不添加其他名称不同的TextBoxes 的内容。删除If,所有TextBoxes的内容都会添加到你的list中。

If txtNo.Name = "txtNo" Then
    clsHelper.list.Add(txtNo.Text)
End If

如果TextBoxes 不是FlowLayoutPanel 的所有直接子级,则需要如下修改代码,以递归迭代FlowLayoutPanel 下的所有控件层次结构。

Private Sub saveIntoList(flp As FlowLayoutPanel)
    clsHelper.list = New List(Of String)
    _saveIntoList(flp)
End Sub

Private Sub _saveIntoList(control As Control)
    If TypeOf control Is TextBox Then
        clsHelper.list.Add(DirectCast(control, TextBox).Text)
        Return
    End If
    For Each child As Control In control.Controls
        _saveIntoList(child)
    Next
End Sub

【讨论】:

  • 我删除了 If 语句并且它可以工作,但它不会循环 flowlayoutpanel 中的所有文本框。它只存储最后两个文本框的内容。有多少文本框并不重要。非常感谢。
  • @Doru Bogyi - 很难在没有看到您的控件的情况下分辨。但是,Controls 属性仅包含控件的直接子级。因此,如果 TextBox 位于 FlowLayoutPanel 的子控件中,您的代码将错过它。对于每个孩子,如果有的话,您需要递归地遍历它的孩子。
  • 我已经使用了您的代码,但它仍然只捕获最后两个文本框的内容。我在上面的问题上发布了带有六个文本框的“FlowLayoutPanel”的图像。请帮我看看。这是我的工作相关项目,我被困在这个阶段。非常感谢您的宝贵时间。
  • @Doru Bogyi - 请发布您的更新代码。此外,以某种方式显示您的 FlowLayoutPanel 有 6 个文本框(表单后面的代码)。
  • 不知道怎么形容谢谢。我发现创建“FlowLayoutPanel”的错误。现在它可以使用递归迭代它的 children 方法来存储所有文本框的内容。再次感谢您抽出宝贵时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-01
  • 1970-01-01
  • 2013-05-08
  • 1970-01-01
  • 2014-05-30
  • 2019-01-04
  • 1970-01-01
相关资源
最近更新 更多