Ну, у вас может быть событие OnSelecting, например:
protected void OnSelecting(object sender, ObjectDataSourceSelectingEventArgs e)
{
if (lblHowManyRows.Text == string.Empty)
{
e.Cancel = true;
lblHowManyRows.Text = [Linq statement here].Count().ToString();
}
}
, где он устанавливает метку на счет в первый раз и получает данные в следующий раз.
В следующий раз lblHowManyRows не будет пустым, поэтому он перейдет к вашему методу odsProduct_Selected:
protected void odsProduct_Selected(object sender, ObjectDataSourceStatusEventArgs e)
{
lblHowManyRows.Text = string.Empty;
}
Очистите метку, чтобы пользователь мог продолжить выбор. Таким образом, при первом щелчке они получают только счетчик, а при следующем щелчке получают полную сетку.
Если бы это был я, я бы, скорее всего, получил полный счет через AJAX / webservice без обратной передачи или вообще без использования gridview, но я не знаю полного контекста вопроса.