DataBind и обратная передача
-
06-07-2019 - |
Вопрос
Это общие вопросы о том, как работает DataBind...
У меня есть простая страница с GridView, которая привязана (в коде aspx) к ObjectDataSource.
Я могу просмотреть функцию Select(), вызываемую ObjectDataSource, чтобы увидеть, что она вызывается при начальной загрузке и при каждом обратном сообщении.У меня есть некоторая логика, которая происходит при ответных сообщениях и которая влияет на данные GridView, и я хочу вызвать GridView.DataBind() позже в ответном сообщении, после того как я внесу некоторые изменения.
Есть ли способ предотвратить автоматическую повторную привязку, которая происходит при каждом обратном сообщении?Означает ли это, что я не могу использовать ObjectDataSource для этого элемента управления?
Решение
Вы правы в том, что детальный контроль, который вы ищете, невозможен и требует кода.Объекты источников данных ASP.NET — это не что иное, как заноза в заднице.Вы обнаружите, что по мере их использования подобные ситуации будут возникать снова и снова.
Некоторые из проблем, которые вы обнаружите:
- Не строго типизированный
- Негибкий (как вы заметили)
- Запутать код представления
Я начал выполнять весь доступ к данным в коде и не оглядывался назад.
Другие советы
Я тоже боролся с этой автоматической привязкой и решил опубликовать свое решение здесь:
- удалите «DataSourceID» со страницы ASPX, если он не установлен, автоматическая привязка отсутствует.
- задавайте DataSourceID в CodeBehind только тогда, когда требуется привязка данных:myGridView.DataSourceID = "MyDataSource";
- не вызывайте myGridView.DataBind() явно, привязка данных происходит автоматически в PreRender
Мне потребовалось некоторое время, чтобы понять это, но теперь все работает нормально.
Контекст
Я использую ObjectDatasource, потому что он обрабатывает всю информацию. пейджинг и сортировка Gridview автоматически для меня.Я использую уровень данных с Linq2SQL и использую его методы Skip() и Take() для загрузки только того объема данных, который необходим для заполнения одной страницы GridView.
Используя ВыбратьМетод и СелектКаунтМетод из ObjectDataSource
Да.Если вам нужен такой контроль над тем, когда происходит привязка данных, вам нужно сделать это в коде.