Невозможно вернуть свойство включения текстового поля, установленное на true, если для него установлено значение false при событии textchanged?

У меня есть веб-форма, в которой я пытаюсь установить для свойства элемента управления текстовым полем значение false в событии textchanged. У меня есть несколько текстовых полей, и я вынес их на панель. Теперь я проверяю условие в событии изменения текста текстового поля. Если условие совпадает, то изменений не будет, но если нет, то я установлю для свойства 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();
    }

Пожалуйста, объясните мне, почему это не работает?


person Omi    schedule 08.05.2014    source источник
comment
Почему вы создаете новый пустой элемент управления, а затем пытаетесь обойти его элементы управления (которые будут пустыми)? Вы это отлаживали?   -  person Kevin Main    schedule 08.05.2014


Ответы (1)


Я думаю твой

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

Должно быть

foreach (Control c in Panel1.Controls)

Кроме того, вы говорите о свойстве Enabled, но не используете его в своем коде. Но из того, что вы говорите, я не думаю, что будут возникать события с измененным текстом, если текстовое поле отключено.

person Tarec    schedule 08.05.2014
comment
К вашему сведению: между свойствами Enabled и ReadOnly есть небольшая разница (см. stackoverflow.com/a/3089258/1191903) - person Kevin Main; 08.05.2014
comment
В заголовке говорится, что невозможно вернуть свойство включения текстового поля, поэтому я упомянул об этом. Если вы не адресовали эти слова OP, я согласен, разница значима. - person Tarec; 08.05.2014
comment
Да, извините, это имелось в виду для OP - чтобы уточнить, какой из них они используют, поскольку они имеют разные свойства и не взаимозаменяемы. - person Kevin Main; 08.05.2014
comment
Мне очень жаль, что я пытался установить свойство только для чтения. По ошибке написал Enable. - person Omi; 08.05.2014
comment
@Tarec Привет, Tarec, на самом деле предложенная вами модификация работает, но есть проблема, с которой я сталкиваюсь, так как я пытаюсь установить для свойства управления readonly значение false в текстовом событии текстового поля, в этом случае я пытаюсь сопоставить входная строка текстового поля со строкой моей записи в базе данных, и если она совпадает, тогда свойство readonly будет ложным, а если нет, то оно будет истинным. Мне удалось установить для этого свойства readonly значение true, если запись не совпадает, но в следующий раз, когда я попытаюсь указать строку соответствия, это свойство readonly не изменится. - person Omi; 09.05.2014
comment
Подскажите, пожалуйста, что еще мне нужно сделать в этом событии с измененным текстом. - person Omi; 09.05.2014