首先创建一个abstract类,继承Microsoft.SharePoint.WebControls.DataTableDataSourceView。之后基于这个类可以创建多个显示不同数据的的DataSourceView,在上文的DataSource控件中有个ViewName属性,可以通过这个属性来区分不同的DataSourceView,从而显示不同的数据。
abstract DataSourceView的实现:


public string Filter
{
get
{
if (ViewState["Filter"] == null)
{
return "";
}
return ViewState["Filter"].ToString();
}
set
{
ViewState["Filter"] = value;
}
}
public string FilterExpression
{
get
{
if (mFilterExpression == null)
{
return "";
}
return mFilterExpression;
}
set
{
Filter = value;
if (this.FilterExpression != value)
{
this.mFilterExpression = value;
this.OnDataSourceViewChanged(EventArgs.Empty);
}
}
}
Filter用来记录过滤条件,SPGridView通过FilterExpression将界面上用户点击的过滤条件传入这个属性中。
之后在继承这个DataSourceView的子类中实现排序和过滤的功能。而分页是通过SharePoint的一个SPGridViewPager绑定这个SPGridView控件就可实现,我就不介绍了。
DataSourceView子类的实现:












































































































































这样就可以实现SharePoint的过滤与排序功能,并且在DataTable中填充需要显示的数据,而不是全部。
然而SharePoint的过滤仍然不很让人满意,因为只能有一个过滤条件。如何实现SharePoint的多条件过滤呢?通过使用Reflector对SPGridView的源代码进行查看,我发现SharePoint SPGridView只能实现单过滤条件,而且不能在界面出现过滤图标。如何实现多过滤将在之后的文章中进行介绍。