Событие ASP .Net Textbox Textchanged

У меня есть веб-страница. Я показываю записи из таблицы, скажем, студентов на моей странице. Я опрашиваю всех студентов и показываю их в сетке. Я хочу использовать текстовое поле для фильтрации результатов datagridview. Например, если пользователь введет a в текстовое поле, в сетке будут показаны только те ученики, в имени которых есть буква «a». Я хочу обновить сетку одновременно с редактированием текстового поля.

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


person Ozgur Dogus    schedule 14.02.2012    source источник
comment
В противном случае вы должны использовать AJAX.. любое событие обратного сообщения с огнем типа char.. нехорошо..   -  person Thit Lwin Oo    schedule 14.02.2012
comment
Вы уверены, что хотите вызывать обратную передачу после каждого нажатия клавиши? Даже если вы поместите все в панель обновления, вашему пользователю все равно придется ждать обновления страницы, прежде чем он сможет ввести другой символ.   -  person rie819    schedule 14.02.2012
comment
Есть довольно много похожих вопросов на здесь   -  person Precious Roy    schedule 14.02.2012


Ответы (5)


Вы должны использовать событие onKeyDown. Однако я бы посоветовал вам использовать ASP.NET AJAX или jQuery для загрузки результатов с помощью Ajax.

Вот один пример из asp.net: http://www.asp.net/ajaxlibrary/AjaxControlToolkitSampleSite/AutoComplete/AutoComplete.aspx

Еще один из проекта Code: http://www.codeproject.com/Articles/38803/Google-Like-Search-TextBox

person Schiavini    schedule 14.02.2012
comment
извините, я не упомянул. мои элементы управления уже находятся в панели обновлений. Текстовое поле не имеет onKeyDown. как я могу это реализовать. Спасибо - person Ozgur Dogus; 14.02.2012
comment
Просто добавьте его как текст, asp.net не распознает и добавит его прямо в HTML. - person Schiavini; 14.02.2012
comment
Однако текстовое поле не должно находиться внутри панели обновления, иначе пользователь не сможет нормально печатать. Вы должны обновить updatePanel из JavaScript - person Schiavini; 14.02.2012

Возможно, вы захотите показать свой текущий код, если есть конкретный метод, который вы хотите использовать для этого. В противном случае люди будут говорить вам, как они это сделают.

Выглядит ли это как-то так прямо сейчас?

<asp:Textbox id="myTextbox" runat="server" onChange="txtChanged" AutoPostBack="true"/>

public void txtChanged(object sender, EventArgs e)
{
    //Get text from textbox
    string text = ((TextBox)sender).Text;

    //Do what ever it is you want to do to edit the text
    text = text.ToUpper();

    //Update the other textbox with this text
    txtMyText2.Text = text;
}
person Precious Roy    schedule 14.02.2012
comment
Да, я сделал почти то же самое. Кроме того, я также использовал автозаполнение с текстовым полем. Спасибо. - person Ozgur Dogus; 14.02.2012
comment
Это, вероятно, ваша проблема, я вижу много сообщений о том, как AutoCompleteExtender подавляет ваш TextChanged событие - person Precious Roy; 14.02.2012
comment
Если у вас есть деньги на Телерика, это, как правило, ваш лучший выбор, но они недешевы. Однако его не всегда легко настроить, и есть определенные уровни сложности, на которых он тоже не работает. И есть другие бесплатные проекты с удобными элементами управления, которые вы можете использовать. - person Precious Roy; 14.02.2012
comment
Вы использовали их? У меня есть сомнения по поводу производительности сторонних элементов управления. - person Ozgur Dogus; 15.02.2012

Я думаю, что лучший и самый чистый способ — использовать Rad Controls, вот пример того, как это сделать: http://demos.telerik.com/aspnet-ajax/controls/examples/integration/gridandcombo/defaultcs.aspx?product=grid

person Ali Issa    schedule 14.02.2012
comment
Хорошо, я думаю, я буду использовать rad control для этого. управление телериком кажется более аккуратным. Мне показалось, что обходные пути javascript требуют дополнительной работы, потому что я буду использовать привязку данных и т. д. Думаю, это будет сложно сделать с js. - person Ozgur Dogus; 15.02.2012
comment
да, с рад-контролем это очень аккуратно, просто и документировано. свяжитесь со мной, если вам нужна помощь. - person Ali Issa; 16.02.2012

Событие TextChanged срабатывает только при отправке запроса на сервер. Если вы хотите запустить событие или создать функцию при изменении текста внутри текстового поля, используйте событие OnKeyDown (правильно с Schiavini).

person Drako    schedule 16.08.2013

Вы можете использовать PicNet, чтобы сделать это в клиенте, а не на сервере, для лучшего взаимодействия с пользователем. Вы можете найти его здесь http://www.picnet.com.au/resources/tablefilter/demo.htm Помните, что Gridview отображается как таблица HTML, поэтому вы можете свободно использовать этот подключаемый модуль jQuery.

Удачи!

person Hanlet Escaño    schedule 14.02.2012