Поиск по linqDataSource требует 2 клика иногда - PullRequest
0 голосов
/ 08 сентября 2011

У меня есть страница с linqdatasource и gridView.Есть несколько текстовых полей для ввода условий поиска.Событие LinqDataSource_OnSelecting фильтрует запрос следующим образом:

var query = from d in db.PersonData 
            select d;

if (textBoxName.Text != "")
    var query = query.where(p => p == textBoxName.Text); 

if (textBoxPhone.Text != "")
    var query = query.where(p => p == textBoxPhone.Text); 

e.Result = query;

И событие btnSearch_Click имеет следующий код:

gridView.DataBind();

В большинстве случаев работает довольно хорошо, но иногда мне приходится нажимать поискдважды нажмите кнопку, чтобы увидеть результаты.Первый раз, когда я нажимаю кнопку поиска, gridView пуст!Второй раз у меня правильные результаты.Надеюсь, вы поясните, почему так иногда происходит.Спасибо!

Ответы [ 2 ]

1 голос
/ 08 сентября 2011

если вы связываете Gridview-Datasource вручную и не используете dataset, вы всегда должны связывать Gridview-Datasource при загрузке страницы.

В сети (asp.net) это не похоже на Win-приложение,Вы не можете привязать источник данных к сетке без события Page-Load.

As solution: вы можете использовать Updatepanle и поместить свою Решётку в это.и используйте GridName.DataBind() после привязки.

0 голосов
/ 07 июля 2012

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

Например: : вы находитесь на странице 10 нефильтрованных результатов, нажимаете Search, и получаете результаты только на 5 страницах. Таким образом, страница, которую вы сейчас просматриваете (10), пуста.

После выполнения оператора LINQ вам необходимо сбросить GridView на первую страницу.

Вторая (возможная) проблема заключается в том, что вы не можете гарантировать порядок всех обработчиков событий. (См. Страница жизненного цикла .) Т.е. , вы не можете рассчитывать на стрельбу LinqDataSource_OnSelecting или btnSearch_Click первыми, и у вас есть DataBind в обработчике Click. Удалите обработчик событий btnSearch_Click (или оставьте его пустым) и используйте вместо него LinqDataSource.OnSelected, который обязательно сработает после LinqDataSource.OnSelecting:

protected void LinqDataSource_Selected(object sender, LinqDataSourceStatusEventArgs e) {
  gridView.DataBind();
  gridView.PageIndex = 0;  // back to beginning when searching
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...