有人知道使DataSourceSelectArguments密封的逻辑吗?
我为一些自定义业务对象和自定义WebControl实现了自定义DataSource(和相关类)。在思考过滤器时(比如在网格中),我发现DataSourceSelectArguments是密封的。当然,我错过了一些东西。(也许这个逻辑与再次询问数据库无意义的事实有关,只是为了过滤?,只是猜测。)
发布于 2019-05-29 09:28:10
抱歉延误,我是在圣日。:)
问题是像ListView这样的DataBoundControl具有SortExpression属性,但不具有FilterExpression。可以通过激活PostBack和Command事件的IButtonControl WebControl实现带有ListView的可排序网格/列表。然后使用SortExpression或Sort方法并传递一个排序表达式,该表达式将填充DataSourceSelectArguments.SortExpression并将其传递给DataSource,DataSource可以构造适当的SQL语句(在我的例子中)以从DB检索数据。这允许数据和显示它的WebControl之间的分离,恕我直言。
按照这种模式,我打算通过在我的DataSourceSelectArguments中使用请求的过滤器填充额外的参数对象来实现过滤器,我将调用Sort,它将把这个arguments对象传递给DataSource,在那里我将构建适当的select子句。
我最后通过在SortExpression中“编码”过滤器信息来解决它,但我发现它很丑陋(对于名称,首先是:sort!= filter),我想知道是否有更合适的做法这或如果我错过了一些更微妙的东西。
编辑:
也许一个更好的办法是重写ListView
的PerformSelect
方法,问我自己实现的DataSourceView
,如果它可以过滤,然后调用一个特殊的ExecuteSelect
,它接受一个特殊的方法,DataSourceSelectArguments
用滤镜对象。当然,当有人使用ListView
非增强版的自定义时,请注意不要做任何会破坏的事情DataSourceView
。
发布于 2019-05-29 10:55:12
我的猜测是因为该类是一个愚蠢的数据传输对象,仅用于将参数传递给方法。
这个类本身没有定义任何操作,因此你期望什么样的多态?例如,现有方法只能知道这个类的属性,这些属性都是可设置的,因此不需要覆盖属性。如果添加了新属性,它们将被忽略。
对于您自己的方法,您是否可以创建自己的Arguments类,恰好具有所有相同的属性?
https://stackoverflow.com/questions/-100001219
复制相似问题