访问多个动态控件值

时间:2012-12-18 21:17:31

标签: asp.net vb.net dynamic-controls

我根据用户选择的下拉列表动态添加多个控件。即,如果用户选择3,则添加3组控件。我的问题不是添加控件,我可以添加它们,我没有添加所有代码,但主要部分,以了解我在做什么。

创建控件后,将捕获相关信息。在Update上单击我需要通过以正确的顺序循环访问这些动态控件的值并检索值并写入数据库。我似乎无法正确访问它们。

希望我有意义。任何帮助,将不胜感激。感谢

''Loop through first set of controls and get values and then the next set etc..

Dim Description as string = ''Get Textbox value
Dim Type as string = ''Get RadComboBox value
Dim XFieldName as string = ''Get RadComboBox value
Dim Colour as string = ''Get RadColorPicker value

以下是我的代码:

VB

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    RecreateControlsTxt("txt", "TextBox")
    RecreateControlsChart("comboChart", "RadComboBox")
    RecreateControls("combo", "RadComboBox")
    RecreateControlsCP("cp", "RadColorPicker")

End Sub

Protected Sub AddControls_Click(sender As Object, e As EventArgs) Handles AddControls.Click

    For i As Integer = 0 To ddlFieldNames.SelectedIndex
        CreateTextbox("txt-" & Convert.ToString(i + 1))
    Next

    For i As Integer = 0 To ddlFieldNames.SelectedIndex
        CreateComboChart("comboChart-" & Convert.ToString(i + 1))
    Next

    For i As Integer = 0 To ddlFieldNames.SelectedIndex
        CreateComboField("combo-" & Convert.ToString(i + 1))
    Next

    For i As Integer = 0 To ddlFieldNames.SelectedIndex
        CreateColourPicker("cp-" & Convert.ToString(i + 1))
    Next

End Sub

Private Sub CreateTextbox(ByVal ID As String)
    Dim txt As New TextBox()
    txt.ID = ID
    txt.Height = 20
    Me.divDesc.Controls.Add(txt)
End Sub

Private Sub CreateComboField(ByVal ID As String)
    Dim combo As New RadComboBox()
    combo.ID = ID
    combo.DataSource = Me.odsChartsSeriesField
    combo.DataTextField = "FieldNames"
    combo.DataValueField = "FieldNames"
    combo.DataBind()
    Me.divField.Controls.Add(combo)
End Sub

Private Sub CreateComboChart(ByVal ID As String)
    Dim comboChart As New RadComboBox()
    comboChart.ID = ID
    Dim item1 As New RadComboBoxItem()
    item1.Text = "Line"
    item1.Value = "smoothedLine"
    item1.ImageUrl = ("Images/linechart.png")
    comboChart.Items.Add(item1)
    Dim item2 As New RadComboBoxItem()
    item2.Text = "Column"
    item2.Value = "column"
    item2.ImageUrl = ("Images/bar chart.png")
    comboChart.Items.Add(item2)
    Dim item3 As New RadComboBoxItem()
    item3.Text = "Pie"
    item3.Value = "pie"
    item3.ImageUrl = ("Images/pie chart.jpg")
    comboChart.Items.Add(item3)
    Me.divChart.Controls.Add(comboChart)
End Sub

Private Sub CreateColourPicker(ByVal ID As String)
    Dim cp As New RadColorPicker()
    cp.ID = ID
    cp.ShowIcon = True
    cp.Style("padding-top") = "1px"
    cp.CssClass = "CustomHeight"
    Me.divCol.Controls.Add(cp)
End Sub

Protected Sub Update_Click(sender As Object, e As EventArgs) Handles Update.Click
    Try
            Dim alltxt = divDesc.Controls.OfType(Of TextBox)()
            Dim allcomboChart = divChart.Controls.OfType(Of RadComboBox)()
            Dim allcomboField = divField.Controls.OfType(Of RadComboBox)()
            Dim allcp = divCol.Controls.OfType(Of RadColorPicker)()

            ''Loop through first set of controls and get values and then the next etc..
            Dim Description as string = ''Get Textbox value
            Dim Type as string = ''Get RadComboBox value
            Dim XFieldName as string = ''Get RadComboBox value
            Dim Colour as string = ''Get RadColorPicker value

            If Page.IsValid Then
                Dim da As New dsSVTableAdapters.Chart
                Dim Result As String = da.Series(60, Description, Type, Colour, "YFieldName", XFieldName)
            End If

    Catch ex As Exception
        lblResult.Text = ex.Message
    End Try
End Sub

1 个答案:

答案 0 :(得分:0)

您可以使用.FindControl(string id)方法,并且应该在视图状态或会话中保持控件数:

Protected Sub Update_Click(sender As Object, e As EventArgs) Handles Update.Click
Try
        ''Loop through first set of controls and get values and then the next etc..
        For i As Integer = 0 To controlsCount - 1
            Dim Description as string = ((TextBox)divDesc.FindControl("txt-" & Convert.ToString(i + 1))).Text ''Get Textbox value
            Dim Type as string = ((RadComboBox)divChart.FindControl("comboChart-" & Convert.ToString(i + 1))).SelectedValue ''Get RadComboBox value
            Dim XFieldName as string = ((RadComboBox)divField.FindControl("combo-" & Convert.ToString(i + 1))).SelectedValue ''Get RadComboBox value
            Dim Colour as string = ((RadColorPicker)divField.FindControl("cp-" & Convert.ToString(i + 1))).SelectedValue ''Get RadColorPicker value

            If Page.IsValid Then
                Dim da As New dsSVTableAdapters.Chart
                Dim Result As String = da.Series(60, Description, Type, Colour, "YFieldName", XFieldName)
        Next
        End If

    Catch ex As Exception
        lblResult.Text = ex.Message
    End Try
End Sub