2015-10-12 113 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