我用PlaceHolder控件动态添加控件:         Dim intRow As Integer = CType(ddlRow.SelectedValue.Trim, Integer)
        Dim intcolumn As Integer = CType(ddlColumn.SelectedValue.Trim, Integer)
        Dim intRowCounter As Integer
        Dim intColumnCounter As Integer
        Dim txtNewTextBox As TextBox        For intRowCounter = 0 To intRow - 1
            For intColumnCounter = 0 To intcolumn - 1
                txtNewTextBox = New TextBox
                txtNewTextBox.ID = "txtRow" & intRowCounter.ToString() & "Column" & intColumnCounter.ToString()
                lhNews.Controls.Add(txtNewTextBox)
                Dim litLabel1 As New LiteralControl
                plitLabel1.Text = " "
                plhNews.Controls.Add(litLabel1)
            Next
            Dim litLabel As New LiteralControl
            litLabel.Text = "<br>"
            plhNews.Controls.Add(litLabel)
        Next
请问怎样得到添加后,TextBox里的值,好像是用FindControl(),但不知具体怎么写。

解决方案 »

  1.   

    Dim intRow As Integer = CType(ddlRow.SelectedValue.Trim, Integer)
            Dim intcolumn As Integer = CType(ddlColumn.SelectedValue.Trim, Integer)plhNews.FindControl("txtRow" & intRowCounter.ToString() & "Column" & intColumnCounter.ToString())
      

  2.   

    高手,这个我试了plhNews.FindControl("txtRow0Column0")不行
    返回Nothing
      

  3.   

    dim tb as TextBox tb=ctype(plhNews.FindControl("txtRow" & intRowCounter.ToString() & "Column" & intColumnCounter.ToString())
    ,TextBox)response.write(tb.Text)
      

  4.   

    这几天有几人在问类似的问题,“动态加载控件,为什么控件事件不能触发了?”,问题是他们都是在if (!IsPostBack)
    {
            //动态产生或装载控件
            //也许需要连接控件事件处理函数
           //加到父控件的Controls
    }里生成或装载了动态控件。当控件在客户端触发,postback到服务器端时,IsPostBack==true,这些控件没有被重新生成,怎么能触发事件?所以答案是,当你需要动态生成或装载控件时,应该在if (!IsPostBack)之外做。我问为什么想在if (!IsPostBack)之内做呢?回答是想只生成一次,跟在ASPX页面里一样<form id="form1" runat=server>
    <asp:Button id="Button1" runat="server" Text="Button1" OnClick="Button_Click"/>#%&%#&%^#&,你怎么会认为这个控件只生成一次呢?这些玩意也不是魔术,想生成一个Button对象,你需要用Button btn = new Button();需要触发它的Click事件,你需要用btn.Click += new EventHandler(YourHandler);即使象包含<asp:Button id="Button1" runat="server" Text="Button1" OnClick="Button_Click"/>的页面,它也是被转化成C#或VB文件,编译成assembly,然后再被执行的啊不信?加一个页面,TestControls.aspx:<%@ Page Debug="true" %>
    <%@ Import Namespace="System.Data"%>
    <%@ Import Namespace="System.Data.SqlClient"%><form id="form1" runat=server>
    <asp:Button id="Button1" runat="server" Text="Button1" OnClick="Button_Click"/>
    <asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns="false" GridLines="Both">
    <Columns>
     <asp:TemplateColumn HeaderText="Name">
     <ItemTemplate><%# DataBinder.Eval(Container.DataItem,"Name")%></ItemTemplate>
     </asp:TemplateColumn>
    </Columns>
    </asp:DataGrid>
    </form>
    <script language="C#" runat="server">
    void Button_Click(Object sender, EventArgs e)
    {
      Button btn = (Button)sender;
      Response.Write(btn.Text + " is clicked<BR>");
    }void Page_Load(Object sender, EventArgs e)
    {
       
     Button btn = new Button();
     btn.ID = "Button2";
     btn.Text = "Button2";
     btn.Click += new EventHandler(Button_Click);
     form1.Controls.Add(btn);
       if (!IsPostBack)
       {
     SqlDataAdapter da = new SqlDataAdapter("select Name=au_fname + ' ' + au_lname from authors", "server=localhost;database=pubs;uid=sa;pwd=;");
     DataTable dt = new DataTable();
     da.Fill(dt);
     DataGrid1.DataSource = dt.DefaultView;
     DataGrid1.DataBind();
       }
     
    //}//这是故意的</script>把最后一个“}”注释掉,然后在浏览器里向你的服务器调用TestControls.aspx
      

  5.   

    高手,这个我试了不行
    Dim objTextBox As TextBox
    objTextBox = CType(plhNews.FindControl("txtRow0Column0"), TextBox)
    返回Nothing
      

  6.   

    goody9807()方法可以,服了,谢谢
      

  7.   

    在循环里用FindControl["txtid"] txtid为textbox的Id应该是可以的吧