Почему DataSourceSelectArguments запечатан? - PullRequest
0 голосов
/ 19 сентября 2008

Кто-нибудь знает логику создания DataSourceSelectArguments запечатанными?

Я реализовал пользовательский источник данных (и связанные с ним классы) для некоторых пользовательских бизнес-объектов и пользовательских веб-контролей. Размышляя в фильтрах (как в сетке), я обнаружил, что DataSourceSelectArguments запечатан. Конечно, я что-то упустил. (Может быть, логика связана с тем, что бессмысленно снова запрашивать БД, просто для фильтрации? Просто догадка.)

Ответы [ 2 ]

1 голос
/ 29 сентября 2008

Извините за задержку, я был на выходных. :)

Проблема в том, что DataBoundControl, такой как ListView, имеет свойство SortExpression, но не FilterExpression. Хорошо реализовать сортируемую сетку / список с ListView с помощью IButtonControl WebControl, который запускает PostBack и событие Command. Затем вы используете метод SortExpression или метод Sort и передаете выражение сортировки, которое заполнит DataSourceSelectArguments.SortExpression, и передадите его в DataSource, который может создать оператор SQL apropiate (в моем случае) для извлечения данных из БД. Это позволяет разделить данные и отображающий их WebControl, IMHO.

Следуя этому шаблону, я собирался реализовать фильтр, заполнив дополнительный объект параметров в моих DataSourceSelectArguments запрошенным фильтром, и я вызову Sort, который передал бы этот объект аргументов в DataSource, где я бы создал Соответствующее предложение.

Я, наконец, решил ее, «кодируя» информацию фильтра в выражении SortExpression, но я нахожу это уродливым (во-первых, для имени: sort! = Filter), и мне было интересно, есть ли более подходящий вариант способ сделать это или если я упускаю что-то более тонкое.

Редактировать

Возможно, лучшим подходом было бы переопределить ListView метод PerformSelect и спросить мою собственную реализацию DataSourceView, может ли он фильтровать, затем вызвать специальный метод ExecuteSelect, который принимает специальный DataSourceSelectArguments с объектом фильтра. Старайтесь не делать ничего, что может сломаться, когда кто-то использует пользовательский ListView с необработанным DataSourceView, конечно.

0 голосов
/ 20 сентября 2008

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

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

Можете ли вы создать свой собственный класс Arguments для своего собственного метода, обладающего одинаковыми свойствами?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...