Самым большим преимуществом DataSourceControls является то, что они отвлекают некоторые опасения по поводу жизненного цикла .NET, обеспечивая поддержку полного CRUD и двухсторонних выражений привязки данных, то есть <% # Bind ("FirstName")%> (однако двухстороннее). привязка данных отстой, так что вы, вероятно, не пропустите ничего). Как шаблон проектирования, это довольно хорошая идея с посредственной реализацией (во многом как сама WebForms).
Если вы отключаете viewstate и обнаруживаете, что пытаетесь выяснить, почему ваши обратные передачи не обрабатываются, или вам приходится вызывать DataBind () в нескольких местах, источники данных могут снять некоторую головную боль, потому что DataBoundControls достаточно умны, чтобы знать, когда им нужны данные, и они просто требуют их от источника данных. Не требуется никаких вызовов DataBind ().
Источники данных также предоставляют удобный способ сортировки, фильтрации и разбиения на страницы. Большинство разработчиков, когда они используют программный код, обычно не разбивают на страницы и вместо этого возвращают огромные наборы результатов из базы данных.
Недостатком источников данных является то, что не было много хороших реализаций. И обычно вы заканчиваете тем, что привязываете свой веб-интерфейс к своей персистентной реализации (то есть SqlDataSource, LinqDataSource и т. Д.) Или в конечном итоге вы используете ObjectDataSource, который отстой, потому что он настолько ограничен, требует жесткого кодирования имен классов и имен методов в ASPX. и использует отражение несколько неэффективно. Из-за этого это не полезно для людей, использующих внедрение зависимостей или статические классы DAO. Это довольно плохо продуманный класс, и он выглядит почти как запоздалая мысль MS.
Лично я бы предпочел использовать источники данных и кодовый код. Используйте DataSource, чтобы убрать головную боль жизненного цикла / состояния представления, а затем предоставьте ему событие «Выбор» в делегатском коде. К сожалению, ObjectDataSource может использовать только отражение, однако вы можете легко написать свою собственную реализацию. У меня есть один из моих собственных, но это не публично. Однако, прежде чем написать это, я использовал это, что компенсирует некоторые недостатки ObjectDataSource:
http://mikeoff.blogspot.com/2006/06/objectdatasource-working-alternative.html