【转】[SharePoint 开发详解] 一个Feature中使用SPGridView的几个Tips

根据上面一篇随笔所介绍的PC购买流程的项目,在项目中,需要有一个生成订单的功能,能够使得Admin很方便的在获得批准的申请中选取一些来生成订单,要求界面操作简单明了,大概的效果图如下:

 

点击checkbox,自动计算当前订单的总价值,点击按钮,生成订单。

有此想到了用SPGridView这个现成的控件来完成,以前也用过这个控件,其实和GridView没什么大区别。这里就简单介绍一下了:

首先Create 一个WebPart

在CreateChildControls()中可以设置SPGridView 的数据源和属性,添加Field等等。

但是CheckBox这一列,必须自己自定义一个模板类来生成,下面是我们自定义的CheckBox模板类,它实现了ITemplate接口:

 

代码

 

    class CheckBoxTemplateField:ITemplate
    {
        string id;
        public EventHandler OnCheck = null;
        public CheckBoxTemplateField(string chbId, EventHandler checkEvent)
        {
            id = chbId;
            OnCheck = checkEvent;
        }
        
        public void InstantiateIn(System.Web.UI.Control container)
        {
            CheckBox chb = new CheckBox();
            chb.AutoPostBack = true;
            chb.ID = id;
            chb.CheckedChanged += OnCheck;
            container.Controls.Add(chb);
        }
    }

 

这样就可以在SPGridView中调用这个模板类,并且为Oncheck事件提供处理方法:

代码

 

     protected override void CreateChildControls()
        {
            if (!_error)
            {
                try
                {
                    SPList sourceList = SPContext.Current.Web.Lists["Purchase Request"];
                    dataSource = new SPDataSource();
                    this.Controls.Add(dataSource);
                    dataSource.List = sourceList;
                    gridView = new SPGridView();
                    gridView.AutoGenerateColumns = false;

 

                    TemplateField chbField = new TemplateField();
                    chbField.HeaderText = "";
                    EventHandler onCheck = new EventHandler(OnCheck);
                    chbField.ItemTemplate = new CheckBoxTemplateField("chb", onCheck);
                    gridView.Columns.Add(chbField);

 

当我们提供了所以的Field绑定后,需要指定一列为Group列,我们这里指定了"Team"列:

 

代码

 

                    SPBoundField createdField = CreateNewBoundField("Created", "Created", 0);
                    gridView.Columns.Add(createdField);

 

                    SPBoundField applicantField = CreateNewBoundField("Created By", "Created By", 0);
                    gridView.Columns.Add(applicantField);

                    SPBoundField mtField = CreateNewBoundField("Machine Type", "Machine Type", 0);
                    gridView.Columns.Add(mtField);

                    SPBoundField compField = CreateNewBoundField("Component Type", "Component Type", 0);
                    gridView.Columns.Add(compField);

                    SPBoundField purNumField = CreateNewBoundField("Purchase Number", "Purchase Number", 0);
                    gridView.Columns.Add(purNumField);

                    SPBoundField purReasonField = CreateNewBoundField("Purchase Reason", "Purchase Reason", 0);
                    gridView.Columns.Add(purReasonField);

                    SPBoundField mgrAppField = CreateNewBoundField("Manager Approval", "Manager Approval", 0);
                    gridView.Columns.Add(mgrAppField);

                    SPBoundField drtAppField = CreateNewBoundField("Director Approval", "Director Approval", 0);
                    gridView.Columns.Add(drtAppField);

                    SPBoundField priceField = CreateNewBoundField("Total Price", "Total Price", 0);
                    gridView.Columns.Add(priceField);

                    gridView.AllowGrouping = true;
                    gridView.AllowGroupCollapse = true;
                    gridView.GroupField = "Team";
                    gridView.GroupFieldDisplayName = "Team";

 

但是"Team"这个Field在数据源的List中是Lookup类型的,如果不作处理,那么显示的结果将会是Team:23;#SharePoint Test,即 连lookupid也显示出来了,这里我们需要在数据绑定的时候作处理,为此我们添加了gridView.RowDataBound += new GridViewRowEventHandler(gridView_RowDataBound)这个事件,gridView_RowDataBound的代码如下:

 

代码

 

void gridView_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                if ((sender as SPGridView).AllowGrouping)
                {
                    SPGridViewRow gridViewRow = e.Row as SPGridViewRow;
                    if (gridViewRow != null && gridViewRow.HeaderText != null)
                    {
                        gridViewRow.HeaderText = "Team : " + new SPFieldLookupValue(DataBinder.GetPropertyValue(e.Row.DataItem, (sender as SPGridView).GroupField).ToString()).LookupValue;
                    }
                }
            }
        }

 

这样,确保我们在SPGridView中做Groupby时,显示的只是LookupValue,而非LookupId;#LookUpValue的形式。

另外我们可以通过设置SPGridView的DataKeyNames为各行保存一些我们可能需要的信息,例如

gridView.DataKeyNames = new string[] { "ID", "Team", "Created By", "Total Price", "Machine Type", "Component Type", "Purchase Number", "Shipped Order" };

如下就可以使用这些数据:

gridView.DataKeys[row.RowIndex].Values["Machine Type"].ToString();

我们用SPGridView作为WebPart开发的时候还遇到了一个问题,就是一访问SharePoint的Session,页面就报异常。但是在代码中,并为出现异常,检查了Web.config文件,发现HttpModule中也加了Session Module,<Page>节点中也Enable了Session, 至今未能找出原因,后来不得已,用了Context.Cache来代替,希望各位看官,有知道原因的,还请不吝赐教。谢谢拉~

SPGridView使用不复杂,关键还在于理清楚项目中的业务逻辑,选择合适的Solution来解决问题。

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

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

相关文章

【LeetCode - 131】分割回文串(dp,dfs)

题目链接&#xff1a;https://leetcode-cn.com/problems/palindrome-partitioning/ 题目&#xff1a; 给定一个字符串 s&#xff0c;将 s 分割成一些子串&#xff0c;使每个子串都是回文串。 返回 s 所有可能的分割方案。 示例: 输入: "aab" 输出: [ ["a…

【转】VSTS中版本控制系统Git与TFVC的区别

VSTS&#xff08;Visual Studio Team Services&#xff09; VSTS简单说就是微软TFS(Team Foundation Services)的升级云版&#xff0c;不用像TFS需要在企业内部服务器上部署&#xff0c;并且是免费提供给用户使用的。 每个有微软账号&#xff08;也是免费注册的&#xff09;的…

【LeetCode - 1254】统计封闭岛屿的数目(dfs,连通块)

题目链接&#xff1a;https://leetcode-cn.com/problems/number-of-closed-islands/ 有一个二维矩阵 grid &#xff0c;每个位置要么是陆地&#xff08;记号为 0 &#xff09;要么是水域&#xff08;记号为 1 &#xff09;。 我们从一块陆地出发&#xff0c;每次可以往上下左…

【转】0.SharePoint服务器端对象模型 之 序言

对于刚刚开始接触SharePoint的开发人员&#xff0c;即使之前有较为丰富的ASP.NET开发经验&#xff0c;在面对SharePoint时候可能也很难找到入手的方向。对于任何一种开发平台而言&#xff0c;学习开发的过程大致会包括&#xff1a;开发工具的使用、开发手段的选择和开发语言的编…

【LeetCode - 122】买卖股票的最佳时机 II(贪心 或 dp)

题目链接&#xff1a;https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/ 给定一个数组&#xff0c;它的第 i 个元素是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易&#xff08;多次买卖一支股票…

【转】1.SharePoint服务器端对象模型 之 对象模型概述(Part 1)

在一个传统的ASP.NET开发过程中&#xff0c;我们往往会把开发分为界面展现层、逻辑业务层和数据访问层这三个层面。作为一个应用开发平台&#xff0c;SharePoint是微软在直观的开发能力和自由的扩展能力之间&#xff0c;取到的一个平衡点&#xff0c;其对象模型的设计理念也反映…

【LeetCode - 123】买卖股票的最佳时机 III

题目链接&#xff1a; 给定一个数组&#xff0c;它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。 注意&#xff1a;你不能同时参与多笔交易&#xff08;你必须在再次购买前出售掉之前的股票&#xf…

【转】1.2SharePoint服务器端对象模型 之 对象模型概述(Part 2)

&#xff08;三&#xff09;Url 作为一个B/S体系&#xff0c;在SharePoint的属性、方法参数和返回值中&#xff0c;大量的涉及到了Url&#xff0c;总的来说&#xff0c;涉及到的Url可以分为如下四类&#xff1a; 绝对路径&#xff1a;完整的Url&#xff0c;包含了协议头&…

【LeetCode - 224】基本计算器(栈)

实现一个基本的计算器来计算一个简单的字符串表达式 s 的值。 题目链接&#xff1a;https://leetcode-cn.com/problems/basic-calculator/ 示例 1&#xff1a; 输入&#xff1a;s "1 1" 输出&#xff1a;2 示例 2&#xff1a; 输入&#xff1a;s " 2-1 …

【转】2.1 SharePoint服务器端对象模型 之 访问网站和列表数据(Part 1)

本节将会介绍SharePoint中最为常用的一些对象模型&#xff0c;以及如何使用这些对象模型来访问和操作网站中的数据。几乎所有的SharePoint服务器端开发都会涉及到这些内容&#xff0c;因此应着重掌握本节中所介绍的基本对象模型的使用方法。由于篇幅所限&#xff0c;在介绍每种…

【LeetCode - 1047】删除字符串中的所有相邻重复项(栈)

https://leetcode-cn.com/problems/remove-all-adjacent-duplicates-in-string/ 给出由小写字母组成的字符串 S&#xff0c;重复项删除操作会选择两个相邻且相同的字母&#xff0c;并删除它们。 在 S 上反复执行重复项删除操作&#xff0c;直到无法继续删除。 在完成所有重复…

【转】2.2 SharePoint服务器端对象模型 之 访问网站和列表数据(Part 2)

&#xff08;二&#xff09;列表&#xff08;SPList&#xff09; 列表是SharePoint中最为重要的数据容器&#xff0c;我们一般保存在SharePoint中的所有数据&#xff0c;都是保存在列表中&#xff08;文档库也是一种列表&#xff09;&#xff0c;因此列表对象在SharePoint的开…

【LeetCode - 227】基本计算器 II(栈)

https://leetcode-cn.com/problems/basic-calculator-ii/ 给你一个字符串表达式 s &#xff0c;请你实现一个基本计算器来计算并返回它的值。 整数除法仅保留整数部分。 示例 1&#xff1a; 输入&#xff1a;s "32*2" 输出&#xff1a;7 示例 2&#xff1a; 输入…

Team Foundation Server的回滚操作

VSTF Rollback 操作 最近遇到要把有些项目需要做回滚操作&#xff0c;发现TFS的UI上没有回滚的操作。 经过百度&#xff0c;查到一个CSDN上的博主发了一种方法&#xff0c;经过验证&#xff0c;那种方法是错误的&#xff1a; 他通过先获取指定变更集-》签出-》签回去&#xff…

【LeetCode - 141142】环形链表(i和ii)(快慢指针,链表)

https://leetcode-cn.com/problems/linked-list-cycle/ 给定一个链表&#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;我们使用整数 pos 来表示链表尾…

sharepoint的文件是怎样存放的及存放的表是哪个

主要有两个表&#xff0c;一个是AllDocs&#xff0c;另一个是AllDocStreams&#xff0c;在AllDocstreams有一个content字段&#xff0c;这个字段是用来保存文件内容的&#xff0c;这个字段最大只能放2G&#xff0c;这也就是SharePoint上传文件最大不能超过2G的原因。 表 AllDoc…

【LeetCode - 556】下一个更大元素 III(贪心,思维)

https://leetcode-cn.com/problems/next-greater-element-iii/ 给你一个正整数 n &#xff0c;请你找出符合条件的最小整数&#xff0c;其由重新排列 n 中存在的每位数字组成&#xff0c;并且其值大于 n 。如果不存在这样的正整数&#xff0c;则返回 -1 。 注意 &#xff0c;…

SharePoint Pages(1)之SharePoint页面体系架构

[开篇]最近一段时间在研究SharePoint技术&#xff0c;在内网建设了一个门户的原型&#xff0c;做一些尝试。由于一些需求要新建一些功能页。开始使用SharePoint制作页面&#xff0c;搞了半天才明白原来内容页不支持内联代码&#xff0c;在Visual Studio里面捣鼓了半夜&#xff…

逆序数问题,用归并排序而非树状数组求解

逆序数&#xff0c;结合归并排序。 之前一直用树状数组写的&#xff0c;今天发现归并排序也很好写。 https://www.nowcoder.com/practice/96bd6684e04a44eb80e6a68efc0ec6c5?tabanswerKey class Solution { public:int a[200005] {0}, tmp[200005] {0};int sort(int left…

SharePoint安全 - SharePoint网站常用页面URL索引

一. 主要网站内容 首页 /default.aspx /Pages/default.aspx 网站设置 /_layouts/settings.aspx 所有网站内容 /_layouts/viewlsts.aspx 移动端所有网站内容 /_layouts/mobile/mbllists.aspx 共享文档 /shared documents/forms/allitems.aspx 管理网站内容结构 /_l…