2015-10-12 25 views
0

我需要基于在下拉视图中选择的项目来构建高级搜索功能。asp.net访问动态控件中的动态控件

我已经在asp.net中以编程方式构建了一个表,并且在这个表中我还动态地添加了一个标签,文本框和下拉控件。

这些都可以正常显示,但是卡住的部分是从文本框和后续下拉列表中取回值。

这是怎样的表正在修建

Public Sub buildAdvancedOptions() 

     'Creat the Table and Add it to the Page 
     Dim table As New Table() 
     table.ID = "advancedTable" 
     Page.Form.Controls.Add(table) 


     For i As Integer = 0 To _dictOfClassAndCol.Count() - 1 
      Dim row As New TableRow() 

      Dim labelCell As New TableCell() 
      Dim textCell As New TableCell() 
      Dim optionsCell As New TableCell() 
      Dim tb As New TextBox() 
      Dim lbl As New Label() 
      Dim ddl As New DropDownList() 

      ' Set a unique ID for each TextBox added 
      lbl.Text = _dictOfClassAndCol.Keys.ElementAt(i).ToString() 
      lbl.ID = "lbl" & _dictOfClassAndCol.Keys.ElementAt(i) 
      tb.ID = "txt" & _dictOfClassAndCol.Keys.ElementAt(i) 
      ddl.ID = "ddl" & _dictOfClassAndCol.Keys.ElementAt(i) 
      ddl.Items.Add("is equal to") 
      ddl.Items.Add("is not equal to") 
      ddl.Items.Add("is like") 
      ddl.Items.Add("is not like") 
      ddl.Items.Add("contains") 
      ddl.Items.Add("between") 

      labelCell.Controls.Add(lbl) 
      textCell.Controls.Add(tb) 
      optionsCell.Controls.Add(ddl) 
      ' Add the TableCell to the TableRow 
      row.Cells.Add(labelCell) 
      row.Cells.Add(textCell) 
      row.Cells.Add(optionsCell) 
      row.Attributes.Add("class", _dictOfClassAndCol.Keys.ElementAt(i).ToString().Replace(" ", "")) 

      ' Add the TableRow to the Table 
      table.Rows.Add(row) 
     Next 
     advanced.Controls.Add(table) 


    End Sub 

我这是如何试图让文本框的值和下拉列表,以便我可以将它们传递到另一个函数建立一个字符串。

Protected Sub btnAdvancedSearch_Click(sender As Object, e As EventArgs) Handles btnAdvancedSearch.Click 

     Dim sb As StringBuilder = New StringBuilder() 
     Dim message As String = "" 
     For Each control As table In advanced.Controls.OfType(Of table)()     
      message += control.ID + ": " + control.ID + "\n" 
     Next 
     ClientScript.RegisterClientScriptBlock(Me.GetType(), "alert", "alert('" & message & "');", True) 

    End Sub 

我能看到,我建行和单元格适量,但不能进入,以便找到在这里控制称为"advancedTable"表控制。

任何和所有帮助如何做到这一点将非常感激。

回答

0

buildAdvancedOptions()开始时,表格被添加到Page.Form.Controls,然后在最后您有advanced.Controls.Add(table)。根据按钮点击事件中的代码,我认为没有必要将它添加到Page.Form.Controls

0

尝试使用FindControl功能和铸造表:

Dim tblTarget As Table = CType(advanced.FindControl("advancedTable"), Table) 

Dim strMessage As String = String.Empty 

For Each objControl As Control In tblTarget.Controls 

    strMessage += objControl.ID & "/" 

Next 

附加代码将需要通过行/细胞迭代,确定搜索参数控制的类型(下拉VS文本框),并得到他们的值,但这应该至少让你在桌面上处理。

+0

对于迟到的回复Windows 10 BSOD发生,我失去了一天的工作感到抱歉,将回到你看看,如果这个工作稍后 –

+0

不幸的是,这个答案没有工作 –

+0

你做它添加到窗体,所以也许尝试Page.Form.FindControl(“advancedTable)而不是advanced.FindControl。 – N0Alias