如何在ASP.Net上拦截RadGrid或ASPxGridView上的过滤器?

时间:2011-11-18 18:48:58

标签: asp.net devexpress telerik-grid aspxgridview

我需要根据独特的过滤要求在Telerik RadGrid和DevExpress ASPxGridView for Asp.Net之间进行选择。数据存在于非规范化的Vax文件中。所有数据访问都是通过Sql Server存储过程调用ODBC Connx查询到平面文件。存储过程参数用于过滤数据。没有任何过滤器会返回数千条记录。

我已成功显示两个测试ASP.net页面上的所有记录,一个是DevExpress ASPxGridVIew,另一个是Telerik的RadGrid。在代码中,我将每个网格数据绑定到返回超过26,000行的存储过程。通过实体框架函数导入调用sproc,该函数导入填充IEnumerable<Customer>,该{{1}}成为每个相应网格的数据源。我能够使用两个网格的过滤器功能,它们看起来效果很好。

我的问题是,在应用网格过滤器之前,将从存储过程返回所有数千行。我想拦截网格的过滤器参数并将它们应用于我的存储过程参数。这样就可以访问更少的记录。

这可以通过第三方网格完成,如果可以,如何完成?

提前致谢。

2 个答案:

答案 0 :(得分:1)

似乎可以使用RadFilter来实现RadGrid。一个example here.

但总的来说,看起来你需要为ItemCommand添加一个处理程序,并根据CommandName执行适当的过滤器。然后你可以重新绑定数据。

答案 1 :(得分:0)

Rad Filter还允许您使用它而不直接绑定到另一个控件或数据源。过滤器可以选择以多种不同的形式提取过滤器表达式(linq提供程序就是其中之一)。然后,您可以将该表达式应用于数据源。我们正在做类似的事情。我们有一个页面,我们使用字段类型和过滤器选项动态创建rad过滤器。然后,用户使用rad过滤器UI根据所需的字段创建过滤器,然后我们提取一个过滤器表达式,我们可以将其应用于在显示数据的页面上创建的数据表。

以下是从过滤器中提取过滤器表达式的代码:

var provider = new RadFilterSqlQueryProvider();
provider.ProcessGroup(myRadFilter.RootGroup);

var sqlFilterExpression = provider.Result;