SharePoint GridView的使用2——DataSourceView的使用

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

abstract DataSourceView的实现:

ContractedBlock.gifExpandedBlockStart.gifCode
        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子类的实现:

ContractedBlock.gifExpandedBlockStart.gifCode
public class ACFrontEndDataSourceView : ACDataSourceView
ExpandedBlockStart.gifContractedBlock.gif    
{
ExpandedSubBlockStart.gifContractedSubBlock.gif        
private static readonly string[] mColumnNames = new string[] "Name""Status""Address" };

        
public ACFrontEndDataSourceView(DataSourceControl owner, string viewName, HttpContext context)
            : 
base(owner, viewName, context)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
        }


        
protected override void FillDataTable(DataTable table, DataSourceSelectArguments selectArguments)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            
            
try
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                
bool isDesc = false;
                
string sort = "Name";
                
                
if (!String.IsNullOrEmpty(this.SortField))
ExpandedSubBlockStart.gifContractedSubBlock.gif                
{
                    sort 
= this.SortField;
                    isDesc 
= this.SortDir.Equals("DESC");
                }

                
else if (selectArguments.SortExpression != null && selectArguments.SortExpression != String.Empty)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
{
                    sort 
= selectArguments.SortExpression; 
                    
if (selectArguments.SortExpression.EndsWith("DESC"))
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
{
                        isDesc 
= true;
                        sort 
= sort.Substring(0, sort.IndexOf("DESC")).Trim();
                    }

                }

                
int count = 0;
                ArrayList serverList 
= new ArrayList();
                
if (IsFilter)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
{
                    
//获取所需填充的全部数据
                }

                
else
ExpandedSubBlockStart.gifContractedSubBlock.gif                
{
                    
//获取Count值,表示根据Filter过滤条件的条目个数
                    
//根据Filter过滤条件获取所有条目列表serverList

                    
for (int i = 0; i < this.PageIndex; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
{
                        
for (int j = 0; j < this.PageSize; j++)
ExpandedSubBlockStart.gifContractedSubBlock.gif                        
{
                            table.Rows.Add(table.NewRow());
                        }

                    }

                }

                
foreach (object server in serverList)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
{
                    DataRow row 
= table.NewRow();
                    row[
0= "";
                    row[
1= "";
                    row[
2= "";
                    table.Rows.Add(row);
                }

                
if (!IsFilter)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
{
                    
for (int i = 0; i < count - (this.PageIndex + 1* this.PageSize; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
{
                        table.Rows.Add(table.NewRow());
                    }

                }

            }

            
catch(Exception ex)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                
throw ex;
            }

        }


        
protected override IEnumerable Select(DataSourceSelectArguments selectArguments)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            DataTable table 
= this.CreateDataTable();
            
this.FillDataTable(table, selectArguments);
            DataView defaultView 
= table.DefaultView;
            
return defaultView;
        }


        
protected override string[] ColumnNames
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            
get
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                
return mColumnNames;
            }

        }


        
protected override string DefaultSortExpression
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            
get
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                
return "Name ASC";
            }

        }

    }

 

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

转载于:https://www.cnblogs.com/wangzhiyang/archive/2009/02/02/1382511.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

瞧瞧UC浏览器对CSS样式的“关怀”

瞧瞧UC浏览器对CSS样式的“关怀” UC对CSS这样的“照顾”尤其8.0以下体现的是淋漓尽致&#xff01; 不"支持"font-family属性&#xff0c;也就是说&#xff0c;在UC浏览器你只能看到一种字体&#xff1b;不"支持"font-szie属性&#xff0c;也就是说&#…

我在ARM板上写的第一个驱动程序

有时大家喜欢拿电灯来当作笑谈&#xff0c;实际上点灯包含多内容很多&#xff0c;如下这篇文章就是关于嵌入式Linux点灯多技术栈&#xff0c;推荐给大家。摘要&#xff1a;搞嵌入式有两个方向&#xff0c;一个是嵌入式软件开发(MCU方向)&#xff0c;另一个是嵌入式软件开发(Lin…

从github上克隆hibernate项目

开发的项目用到了hibernate进行对象的持久化&#xff0c;最近项目上不忙&#xff0c;打算通过官方文档和源码来进行深度学习。第一步将hibernate部署到本地就折腾了好久&#xff0c;打算记录一下。 关于github的注册说一句&#xff0c;推荐使用outlook邮箱进行注册&#xff0c;…

string、char *、char []之间的相互转换

最近工作中遇到了string、char *、char []之间的相互转换&#xff0c;今天终于抽出时间将他们之间的转换记录下来&#xff0c;使用的是CodeBlocks软件&#xff0c;编译器为GNU GCC compiler&#xff0c;下面看代码&#xff1a; #include <iostream> #include <stdio.…

C语言中匿名的最高境界

C语言中有没有见过(int [2]){19,20}或者int (*pt2)[4]的使用方法&#xff0c;字面上可能不好理解&#xff0c;这是C99之后才新增的知识点&#xff0c;名为复合型表述Compound Literals&#xff0c;一旦熟悉使用&#xff0c;便会体会到它简洁而强大的表达。什么是”复合型表述“…

类与对象(C++)

2.1 类与对象2.1.1 结构体2.1.2 类 2.1 类与对象 2.1.1 结构体 C中的结构体不仅可以包含不同类型的数据&#xff0c;而且还可以包含操作这些数据的函数。 #include <iostream> using namespace std;struct Complex{double i;double r;void init(double rr, double ii)…

Mysql数据库的分离和附加转

一.MYSQL的命令行模式的设置&#xff1a;桌面->我的电脑->属性->环境变量->新建->PATH“&#xff1b;path/mysql/bin;”其中path为MYSQL的安装路径。二.简单的介绍一下命令行进入MYSQL的方法&#xff1a;1.C:/>mysql -h hostname -u username -p 按ENTER键&a…

Python中的xxx+=xxx和xxx=xxx+xxx一些区别及执行过程

预知小知识&#xff1a; Python中的变量与其他语言稍有差异&#xff0c;如a 10并不是直接在内存中创建一个变量a其值为10&#xff0c;而是在内存中创建一个a这个a指向这个10&#xff0c;在Python中所有牵扯到等号的均不是值赋值&#xff0c;全都是引用(C的小伙伴可以大致理解为…

codeblocks安装后提示找不到编译器

安装了自带编译器的codeblocks&#xff0c;但是打开后提示没有找到compiler&#xff0c; 经过几分钟的搜索&#xff0c;找了原因&#xff1a; 打开codeblocks&#xff0c;进入settings->compiler&#xff0c;选择如下: 然后&#xff0c;选择Toolchain executables&#xff…

欢迎加入Hello China技术讨论群组-QQ群:38467832

欢迎加入Hello China技术讨论群组-QQ群&#xff1a;38467832 在此群组内&#xff0c;我们可一起讨论Hello China及其它嵌入式操作系统的技术问题、应用问题以及其它相关问题。 Hello China相关的技术文档和实现文章&#xff0c;也会首先在该群组内发布给群内朋友。 转载于:http…

一文读懂|栈溢出攻击

什么是栈简单来说&#xff0c;栈 是一种 LIFO&#xff08;Last In Frist Out&#xff0c;后进先出&#xff09; 形式的数据结构。栈一般是从高地址向低地址增长&#xff0c;并且栈支持 push&#xff08;入栈&#xff09; 和 pop&#xff08;出栈&#xff09; 两个操作。如下图所…

用来做 favicon 的站点

这个站点是最好用的 http://converticon.com/转载于:https://www.cnblogs.com/johnsonshu/archive/2012/06/28/2568530.html

Codeforces Round #533 (Div. 2) C.思维dp D. 多源BFS

题目链接&#xff1a;https://codeforces.com/contest/1105 C. Ayoub and Lost Array 题目大意&#xff1a;一个长度为n的数组&#xff0c;数组的元素都在[L,R]之间&#xff0c;并且数组全部元素的和可以被3整除&#xff0c;问有多少种方法构建出该数组。答案模1000000007 例 输…

c++并发编程之原子操作的实现原理

原子(atomic)本意是”不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为”不可被中断的一个或一系列操作”. 处理器如何实现原子操作 (1) 使用总线锁保证原子性 如果多个处理器同时对共享变量进行读写操作,那么共享变量就会被多个处理器同时进行操作,这样读写…

Sqlserver 通用存储过程(二) 联合主键

CREATEPROCP_public_ViewPage /**//**//**//* no_mIss 通用分页存储过程 2007.3.1 QQ:34813284 适用于联合主键/单主键/存在能确定唯一行列/存在能确定唯一行的多列 (用英文,隔开) 调用&#xff1a; 第一页查询时返回总记录和总页数及第一…

PHP定时执行任务的实现

此代码只要运行一次后关闭浏览器即可。 ignore_user_abort();//关掉浏览器&#xff0c;PHP脚本也可以继续执行.set_time_limit(0);// 通过set_time_limit(0)可以让程序无限制的执行下去$interval60*30;// 每隔半小时运行do{//这里是你要执行的代码sleep($interval);// 等待5分钟…

预检请求

不久前在公司写了一个基于 Hapijs 的后端项目&#xff0c;感觉这个框架很有自己的特点&#xff0c;跟 Express 和 Koa 的区别比较大&#xff0c;体现了配置大于编码的思想。用起来很方便&#xff0c;据说 Walmart 团队用这个框架扛住了黑五的流量&#xff0c;看起来在实际项目中…

linux编译动态库之-fPIC

在生成动态库时&#xff0c;常常习惯性的加上fPIC选项&#xff0c;fPIC有什么作用和意义&#xff0c;加不加有什么区别&#xff0c;这里做下小结&#xff1a; fPIC的全称是 Position Independent Code&#xff0c; 用于生成位置无关代码。什么是位置无关代码&#xff0c;个人理…

深入理解golang 的栈

线程栈(thread stacks)介绍 先回顾下linux的内存空间布局 简书_stack02.png当启动一个C实现的thread时&#xff0c;C标准库会负责分配一块内存作为这个线程的栈。标准库分配这块内存&#xff0c;告诉内核它的位置并让内核处理这个线程 的执行。在linux系统中&#xff0c;可通过…

const和define的区别

今天查看以前的代码&#xff0c;进行优化&#xff0c;回想到const和define一些区别&#xff0c;记录下来。 1.const是关键字&#xff0c;define不是关键字。 2.const定义的是只读变量&#xff0c;不是常量&#xff0c;define宏定义的是常量&#xff0c;变量不能作为定义数组的维…