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,一经查实,立即删除!

相关文章

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

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

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;便会体会到它简洁而强大的表达。什么是”复合型表述“…

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

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

一文读懂|栈溢出攻击

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

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

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

理解ALSA

最近处理音频的问题&#xff0c;所以看了一些不错的文章&#xff0c;整理一些有用的资料出来&#xff0c;有需要的可以收藏。ALSA的框架图&#xff1a;这个图可以说是我目前看到最不错的&#xff0c;我发现很多应用开发的&#xff0c;一出现解决不了的问题&#xff0c;或者奇怪…

Xshell 6如何设置多个session显示在同一个窗口

刚才安装了Xshell 6之后&#xff0c;发现在同一个窗口只能显示4个session&#xff0c;网上查找了一些资料但是都不是想要的结果&#xff0c;经过几分钟的查找&#xff0c;终于找到了设置在同一个窗口session的个数&#xff0c;因此记录下来&#xff0c;或者给与他人帮助。以下以…

blockUI应用到Asp.Net页面时服务器控件(Button等)失效的问题

问题&#xff1a;在Asp.Net页面中用blockUI这个控件实现弹出窗口的效果&#xff0c;弹出页面内容为页面中某个Panel中的内容&#xff0c;包含TextBox、Button等服务器控件。使用时就简单的设置message属性。问题出来了&#xff0c;当显示这个弹出页面后&#xff0c;所有Button等…

android DatePicker

为什么80%的码农都做不了架构师&#xff1f;>>> public class DatePicker extends FrameLayout java.lang.Object android.view.View android.view.ViewGroup android.widget.FrameLayout android.widget.DatePicker DatePicker 一个选择年月日的日历布局视图 公…

一次限制进程的 CPU 用量的实操过程

大家好&#xff0c;我是飞哥&#xff01;给大家分享一个事情。背景是这样的&#xff0c;我们要测试某个第三方 SDK 运行性能&#xff0c;这是个 CPU 密集型的服务。我想评估一下它运行一遍到底有多吃 CPU&#xff0c;以便评估上线后我们需要部署多少台服务器。我们是在一台 16 …

map与unordered_map的区别

set/map底层实现的机制是红黑树。红黑树是一种近似于平衡的二叉查找树&#xff0c;默认是按升序排序的。在红黑树上做查找、插入、删除操作的时间复杂度为O(logN)。 红黑树的缺点&#xff1a;空间占用率高&#xff0c;每一个节点都需要额外保存父节点、孩子节点和红/黑性质&am…

navicat不同数据库数据传输

复制fo的t_fo_account表结构和数据到base库 结果 转载于:https://www.cnblogs.com/feifeicui/p/10307646.html

收藏了两年的嵌入式AI资源学习笔记,今天全分享给大家(附代码/资料/视频/学习规划)...

当前乃至未来5-10年&#xff0c;嵌入式开发者还有哪些风口&#xff1f;”画外音&#xff1a;风口的本质&#xff0c;其实就是一段时间的人才供需不平衡。说白了就是由于行业突变&#xff0c;敏锐的资本快速进入&#xff0c;导致短时间内行业大量扩张&#xff0c;需要大量开发者…

Vmware由于centos升级内核不可运行(C header files matching your running kernel were not found)的解决方案...

C header files matching your running kernel were not found. Refer to your distributions documentation for installation instructions - NoH4cker - 博客园 http://www.cnblogs.com/NoH4cker/p/4840571.html centos6 安装wmwaretools找不到kernel header - jiejnan - 博…

分享一个消息组件

前段时间在收集项目素材时发现一个很好用的消息组件ymPrompt,顺便收集了圈子里关于这个组件的文章&#xff0c;感觉介绍不是很完善。 废话少说先看一下演示效果: 演示Demo: http://www.ajaxbbs.net/test/ymPrompt4.0/demo.html 截取的图片: Vista样式 简短的实现脚本: Code--导…

用C语言搞机器学习,来个最基础的Knn入门

本来是准备周末加班两天的&#xff0c;然后&#xff0c;临时突然其他事情又取消了。顺便看了下csdn&#xff0c;看到一篇介绍KNN的&#xff0c;因为我现在做的也是属于机器学习方向&#xff0c;那自然也要了解一些这部分。KNN是什么&#xff1f;KNN可以说是最简单的分类算法之一…

最简单的断线断点检测器电路

要在长长的电线中找到究竟是哪里断开了&#xff0c;可以做一个断线断点检测器。而且几个元器件就可以实现&#xff0c;非常简单。这个断线断点检测器不仅可以识别火线、零线&#xff0c;还可以检测电线是哪里断开了。实际是检测哪里的磁场强&#xff0c;哪里的电磁辐射大。来看…

声学发展史之——人工智能(AI)声学

引言最近接手了一个EOL (End of Line)的项目&#xff0c;用高斯混合模型GMM (Gaussian Mixture Model)作生产线上产品的质量检测。虽然提取特征的过程很痛苦&#xff0c;不过还是很有意思。也是因为兴趣&#xff0c;去年在Coursera上了吴恩达的Machine Learning&#xff0c;算是…

一个application多个 URL

需求&#xff1a; 希望一个sharepoint网站&#xff0c;有多个网址去访问。例如&#xff1a;http://moss:8080/的网站&#xff0c;http://aphla.prismshareusa.int/ 和 http://aphla.carat.int/ 两个网站同时访问。 解决方法如下&#xff1a; 1&#xff09;创建DNS…