2015-04-30 4 views
0

У меня есть сетка данных, которая создается динамически для отображения информации, полученной из базы данных. Сетка данных состоит из нескольких связанных столбцов и двух столбцов кнопок для каждой строки, кнопки просмотра и удаления.Необходимо дважды нажать кнопку для запуска события

Щелчок по любой кнопке вызывает метод Page_Load() с параметром Page.IsPostBack как false.

if (!Page.IsPostBack) 
    {   
     this.bindForm(); // Populates drop down lists that the user can select  
     setAccess(false); // Sets access for the page 

     // Stuff commented out to avoid confusion     
    } 
    else 
    { 
     bindDynamicGrids(); // Create the data grid(s) and populate them   
    } 

Так что, когда я первый нажмите на кнопку выше код будет вызываться с IsPostBack ложным, а динамические сетки получить оценку. Но событие нажатия кнопки не срабатывает. Когда я нажимаю кнопку во второй раз, страница_Load вызывается с IsPostBack false, а после выполнения bindDynamicGrids() запускается событие нажатия кнопки. Я не могу понять разницу между первым и вторым щелчками.

Я прочел несколько потоков;

ASP.NET C#, need to press a button twice to make something happen

http://forums.asp.net/t/1783694.aspx?ASP+NET+Button+needs+to+be+clicked+twice

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

Когда это не сообщение, вызывается метод bindForm(), который заполняет все выпадающие списки. Событие редактирования кликов заполняет эти выпадающие списки со значениями из строки, но событие click всегда является обратной записью и форма уже привязана.

Я также счел, что сценарий автоматически дважды щелкает по одной из кнопок в любое время, когда пользователь делает одно клик, но мне не удалось найти свойство «OnClick» для кнопки столбца. Любая помощь, которая может быть предоставлена, была бы феноменальной.

+0

Пожалуйста, пост код для двух методов: 'bindForm()' и 'bindDynamicGrids()'. –

+0

Я считаю, что любой элемент управления, созданный динамически или «на лету», не регистрирует события сразу, вы должны подписаться на них? Я помню, как что-то повторялось, и динамические элементы управления в веб-формах asp.net вызывают проблемы. – JonH

+0

Добавляйте элементы и события во время 'Page_Init'. – walther

ответ

0

Дело в том, что событие нажатия кнопки происходит после события Page_Load, означающего, что фильтрация не применяется к первой обратной передаче. Он был обновлен во второй обратной передаче, и вы видите фильтрацию. Вы можете попытаться переместить код вашего события page_load в OnPreRender, чтобы перезагрузка произошла после события нажатия кнопки.

для получения дополнительной информации смотрите здесь: Button needs to be clicked twice и here

+0

Я все еще понимаю, почему это проблема. Последовательность событий одинакова в обеих ситуациях. Он вызывает Page_Load и вызывает bindDynamicGrids(). Поэтому даже после нажатия кнопки редактирования второй раз тот же bindDynamicGrids() снова запускается, но по какой-то причине он поднимает клик во второй раз. – Archetype90

+0

эй, я видел его где-то, но я не проверял, что: IsPostBack = true полагается влиять каким-то образом ... я действительно не уверен в этом, но, может быть, он может помочь. пожалуйста, уточните меня, если да. –