Когда DataBind вызывается автоматически на странице ASP.NET? - PullRequest
2 голосов
/ 07 марта 2012

У меня есть GridView на странице с кнопкой поиска.GridView не виден для начала, поэтому пользователь должен щелкнуть поиск, прежде чем будут получены результаты.DataSourceID устанавливается в качестве идентификатора ObjectDataSource.Когда вызывается click, из обработчика щелчка вызывается следующий метод:

private void PopulateGrid()
{
    gv.Visible = true;
    gv.DataBind();
}

Проблема возникает, когда тот же метод вызывается из обработчика Page_Load.Мы сохраняем поисковые термины пользователя в их сеансе и извлекаем их при первом обращении к странице, что-то вроде этого:

if(!PostBack && Session["search"] != null)
{
   SetSearchFromSession();
   PopulateGrid();
}

Проблема в этом случае состоит в том, что событие Selecting объекта ObjectDataSource запускается дважды.Один раз, когда GridView сделан Visible, и снова, когда вызывается DataBind ().Я исправил это, подставив gv.Visible = true;для PopulateGrid(); в Page_Load.

Но я бы хотел понять, что происходит.Почему настройка GridView, видимая из загрузки страницы, приводит к привязке данных, а вызов в событии нажатия кнопки - нет?

1 Ответ

1 голос
/ 07 марта 2012

Если вы декларативно установите источник данных, то он будет вызываться после PreRender, а если вы вызовете DataBind, он будет вызван снова.(дважды)

DataBinding

Возникает после события PreRender элемента управления, которое происходит после события PreRender страницы.(Это относится к элементам управления, свойство DataSourceID которых установлено декларативно. В противном случае это событие происходит при вызове метода DataBind элемента управления.)

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

source

...