一旦在textchanged事件上设置为false,无法将文本框启用属性设置为true?

时间:2014-05-08 11:33:05

标签: c# asp.net textbox textchanged

我有一个网络表单,我试图在textchanged事件上将textbox控件属性设置为false。我有多个文本框,我把它们放到了一个面板中。现在我正在检查文本框的文本更改事件中的条件。如果条件匹配则不会有任何更改,但如果没有,那么我将面板控件中文本框的enable属性设置为false。 这就是我在做什么 -

<asp:TextBox ID="TextBox1" runat="server" Width="150px" AutoPostBack="True" 
        ontextchanged="TextBox1_TextChanged"></asp:TextBox>
<asp:Panel ID="Panel1" runat="server">
            <asp:TextBox ID="txt1" runat="server"></asp:TextBox>
            <asp:TextBox ID="txt2" runat="server"></asp:TextBox>
            <asp:TextBox ID="txt3" runat="server"></asp:TextBox>
</asp:Panel>

我的cs代码 -

protected void TextBox1_TextChanged(object sender, EventArgs e)
    {
        SqlConnection cons1 = new SqlConnection(ConfigurationManager.ConnectionStrings["constr"].ConnectionString);
        cons1.Open();
        SqlCommand scmd1 = new SqlCommand("select name from tbl_names where name='"+TextBox1.Text+"'", cons1);
        SqlDataReader sdr1 = scmd1.ExecuteReader();
        if (sdr1.HasRows)
        {
            while (sdr1.Read())
            {
                Panel1.Visible = true;
                Control ctrl = new Control();
                foreach (Control c in ctrl.Controls)
                {
                    if (c is TextBox && c.ID.StartsWith("txt"))
                        ((TextBox)c).ReadOnly = false;
                }
            }
        }
        else
        {
            Panel1.Visible = true;
            Control ctrl1 = new Control();
            foreach (Control c in ctrl1.Controls)
            {
                if (c is TextBox && c.ID.StartsWith("txt"))
                    ((TextBox)c).ReadOnly = true;
            }
        }
        cons1.Close();
    }

请指导我为什么这不起作用?

1 个答案:

答案 0 :(得分:2)

我认为你的

Control ctrl = new Control();
foreach (Control c in ctrl.Controls)

应该是

foreach (Control c in Panel1.Controls)

此外,您正在谈论Enabled属性,但您不在代码中使用它。但是根据你所说的,如果文本框被禁用,我认为不会抛出textchanged事件。