为什么DataSourceSelectArguments是密封的?

时间:2008-09-19 08:17:53

标签: asp.net database

有人知道使DataSourceSelectArguments密封的逻辑吗?

我为一些自定义业务对象和自定义WebControl实现了自定义DataSource(和相关类)。在思考过滤器时(比如在网格中),我发现DataSourceSelectArguments是密封的。当然,我错过了一些东西。 (也许这个逻辑与再次询问数据库是无意义的事实有关,只是为了过滤?,只是猜测。)

2 个答案:

答案 0 :(得分:1)

抱歉延迟,我是在神圣的日子。 :)

问题是像ListView这样的DataBoundControl有一个SortExpression属性,但不是FilterExpression。可以通过激活PostBack和Command事件的IButtonControl WebControl实现带有ListView的可排序网格/列表。然后使用SortExpression或Sort方法并传递一个排序表达式,该表达式将填充DataSourceSelectArguments.SortExpression并将其传递给DataSource,DataSource可以构造适当的SQL语句(在我的例子中)以从DB检索数据。这允许数据和显示它的WebControl之间的分离,恕我直言。

遵循这个模式我将通过在我的DataSourceSelectArguments中使用请求的过滤器填充额外的参数对象来实现过滤器,我将调用Sort,它将把这个arguments对象传递给DataSource,我将构建它适当的选择条款。

我最终通过在SortExpression中“编码”过滤器信息来解决它,但我发现它很难看(对于名称,首先是:sort!= filter),我想知道是否有更合适的这样做的方式,或者如果我错过了一些更微妙的东西。

修改

也许更好的方法是覆盖ListView的{​​{1}}方法并询问我自己实施的PerformSelect是否可以过滤,然后调用特殊的DataSourceView接受带有过滤器对象的特殊ExecuteSelect的方法。当然,当有人使用非增强型DataSourceSelectArguments的自定义ListView时,请注意不要做任何破坏。

答案 1 :(得分:0)

我的猜测是因为该类是一个愚蠢的数据传输对象,仅用于将参数传递给方法。

这个类本身没有定义任何操作,因此你期望什么样的多态?例如,现有方法只能知道这个类的属性,这些属性都是可设置的,因此不需要覆盖属性。如果您添加了新属性,它们将被忽略。

对于您自己的方法,您是否可以创建自己的Arguments类,恰好具有所有相同的属性?