2012-08-12 87 views
0

我正在向表单添加多个动态下拉列表。 我想通过点击一个按钮访问下拉列表的选定值。访问多个动态下拉列表选定的值 - ASP.Net

  Private pnlDropDownList As Panel 
       Protected Sub Page_PreInit(ByVal sender As Object, ByVal e As EventArgs) Handles Me.PreInit 
        'Create a Dynamic Panel 
        pnlDropDownList = New Panel() 
        pnlDropDownList.ID = "pnlDropDownList" 
        pnlDropDownList.BorderWidth = 1 
        pnlDropDownList.Width = 300 
        Me.form1.Controls.Add(pnlDropDownList) 

        'Create a LinkDynamic Button to Add TextBoxes 
        Dim btnAddDdl As New Button 
        btnAddDdl.ID = "btnAddDdl" 
        btnAddDdl.Text = "Add DropDownList" 
        AddHandler btnAddDdl.Click, AddressOf btnAdd_Click 
        Me.form1.Controls.Add(btnAddDdl) 

        'Recreate Controls 
        RecreateControls("ddlDynamic", "DropDownList") 
       End Sub 

       Protected Sub btnAdd_Click(ByVal sender As Object, ByVal e As EventArgs) 
        Dim cnt As Integer = FindOccurence("ddlDynamic") 
        CreateDropDownList("ddlDynamic-" & Convert.ToString(cnt + 1)) 
       End Sub 

       Private Function FindOccurence(ByVal substr As String) As Integer 
        Dim reqstr As String = Request.Form.ToString() 
        Return ((reqstr.Length - reqstr.Replace(substr, "").Length)/substr.Length) 
       End Function 

       Private Sub RecreateControls(ByVal ctrlPrefix As String, ByVal ctrlType As String) 
        Dim ctrls As String() = Request.Form.ToString().Split("&"c) 
        Dim cnt As Integer = FindOccurence(ctrlPrefix) 
        If cnt > 0 Then 
         For k As Integer = 1 To cnt 
          For i As Integer = 0 To ctrls.Length - 1 
           If ctrls(i).Contains((ctrlPrefix & "-") + k.ToString()) AndAlso Not ctrls(i).Contains("EVENTTARGET") Then 
            Dim ctrlID As String = ctrls(i).Split("="c)(0) 

            If ctrlType = "DropDownList" Then 
             CreateDropDownList(ctrlID) 
            End If 
            Exit For 
           End If 
          Next 
         Next 
        End If 
       End Sub 

       Private Sub CreateDropDownList(ByVal ID As String) 

        Dim ddl As New DropDownList() 
        ddl.ID = ID 
        ddl.DataSource = Me.odsNames 
        ddl.DataTextField = "Name" 
        ddl.DataValueField = "ID" 
        ddl.DataBind() 
        ddl.Items.Insert(0, New ListItem("All", -1)) 
        ddl.SelectedIndex = 0 
        ddl.AutoPostBack = True 
        AddHandler ddl.SelectedIndexChanged, AddressOf OnSelectedIndexChanged 
        pnlDropDownList.Controls.Add(ddl) 


        Dim lt As New Literal() 
        lt.Text = "<br />" 
        pnlDropDownList.Controls.Add(lt) 
       End Sub 

       Protected Sub OnSelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) 
        'Not used, want to get Values from button click 
       End Sub 


      Protected Sub cmdAdd_Click(ByVal sender As Object, ByVal e As EventArgs) Handles cmdAdd.Click 
            Dim cnt As Integer = FindOccurence("ddlDynamic") 
            pnlDropDownList.Controls.Remove(pnlDropDownList.FindControl("ddlDynamic-" & Convert.ToString(cnt))) 
      End Sub 

这是我想检查所有动态dropdownlists并提取其选择的值

   Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click 
        '' Check All dynamic Dropdownlists and retrieve selected values 
       End Sub 


      End Class 

任何援助将不胜感激。感谢

+2

请告诉我们的代码,否则很难判断什么错。 – 2012-08-12 20:04:26

+0

下次当你想问问题显示一些代码来显示你的努力 – codingbiz 2012-08-12 20:18:15

+0

@Tim Schmelter,-codingbiz。抱歉我已经添加了我的代码以及我正在尝试建立的内容。 – user1588253 2012-08-13 07:06:02

回答

0

你可以使用Linq获得在面板动态DropDowns的引用:

Dim allDdls = pnlDropDownList.Controls.OfType(Of DropDownList)() 
For Each ddl In allDdls 
    Dim selectedValue = ddl.SelectedValue 
Next 
+0

正是我在找的东西。谢谢@Tim Schmelter – user1588253 2012-08-13 17:22:17