科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道用WSSv3中的SPGridView控件来显示数据

用WSSv3中的SPGridView控件来显示数据

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

开发ASP.NET应用时,通常需要显示行列格式的表格类型数据。尽管我们可以通过程序创建一个HTML表格来实现该需求,但不如使用ASP.NET 2.0中GridView这样的服务器端控件来得更便捷。

作者:sunmoonfire 来源:blog 2007年9月3日

关键字: 数据 WSSv3 SharePoint SharePoint2007 Office

  • 评论
  • 分享微博
  • 分享邮件
开发ASP.NET应用时,通常需要显示行列格式的表格类型数据。尽管我们可以通过程序创建一个HTML表格来实现该需求,但不如使用ASP.NET 2.0中GridView这样的服务器端控件来得更便捷。在WSS平台中同样也提供了一个SPGridView控件,从ASP.NET GridView控件继承而来。该控件为我们在SharePoint开发中显示表格型数据提供了很大的便利。

在我们添加一个SPGridView控件到一个自定义页面中之前,我们首先必须通过@Register在页面顶部添加一个指向Microsoft.SharePoint.dll的注册,并引用Microsoft.SharePoint.WebControls命名空间。

<%@ Register 
  
Tagprefix="SharePoint" 
  Namespace
="Microsoft.SharePoint.WebControls" 
  Assembly
="Microsoft.SharePoint, [4-part assembly name] " %>

完成@Register注册部分编写后,我们就可以在应用程序页面中创建SPGridView控件的标记了。注意,标记前必须加上注册时指定的前缀。

<SharePoint:SPGridView 
  
runat="server" 
  ID
="grdPropertyValues" 
  AutoGenerateColumns
="false"
  RowStyle-BackColor
="#DDDDDD"
  AlternatingRowStyle-BackColor
="#EEEEEE" /> 

与其他ASP.NET中的Grid控件不同,SPGridView控件并不支持自动生成栏。如果你不指定AutoGenerateColumns属性为"false", 将会得到一个运行时错误。

用SPGridView控件显示一个ADO.NET的DataTable

填充一个SPGridView控件最简单的办法就是创建一个ADO.NET DataTable。因为我们可以将DataTable的DefaultView属性指定到SPGridView控件的DataSource上作为SPGridView的数据源,然后直接调用DataBind方法即可。
下面的示例展示了一个名为PropertyCollectionBinder的工具类,通过这个类包装了以下工作:创建并显示一个具有两栏数据的ADO.NET DataTable。同时,这个类还提供一个很有用的方法BindGird,接受一个SPGridView控件做参数,并会调用其数据绑定方法来展示ADO.NET DataTable的数据。

using System.Data;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;

public class PropertyCollectionBinder {
  
protected DataTable PropertyCollection = new DataTable();
  
public PropertyCollectionBinder() {
    PropertyCollection.Columns.Add(
"PropertyName"typeof(string));
    PropertyCollection.Columns.Add(
"PropertyValue"typeof(string));
  }
  
public void AddProperty(string PropertyName, string PropertyValue) {
    DataRow newRow 
= PropertyCollection.Rows.Add();
    newRow[
"PropertyName"= PropertyName;
    newRow[
"PropertyValue"= PropertyValue;
  }
  
public void BindGrid(SPGridView grid) {
    SPBoundField fldPropertyName 
= new SPBoundField();
    fldPropertyName.HeaderText 
= "Property Name";
    fldPropertyName.DataField 
= "PropertyName";
    grid.Columns.Add(fldPropertyName);
    SPBoundField fldPropertyValue 
= new SPBoundField();
    fldPropertyValue.HeaderText 
= "Value";
    fldPropertyValue.DataField 
= "PropertyValue";
    grid.Columns.Add(fldPropertyValue);
    grid.DataSource 
= PropertyCollection.DefaultView;
    grid.DataBind();
  }
}

用PropertyCollectionBinder 来绑定数据

这样我们就可以通过在自定义页面的后台代码中使用PropertyCollectionBinder类来简化用SPGridView控件显示一系列名/值对的过程。下面给出一个这样的例子,通过SPGridView来显示调用WSS对象模型得到的一些属性值。
SPSite siteCollection = this.Site;
SPWeb site 
= this.Web;
PropertyCollectionBinder pcb 
= new PropertyCollectionBinder();
pcb.AddProperty(
"Site Title", site.Title);
pcb.AddProperty(
"Site ID", site.ID.ToString().ToUpper());
pcb.AddProperty(
"Current User Name", site.CurrentUser.Name);
pcb.BindGrid(grdPropertyValues);


在基于SharePoint的解决方案中使用SPGridView控件还有一个好处,就是该控件已经集成了WSSv3的样式。同样,在SharePoint的标准后台页面和WebPart中也大量使用了该控件。这就是说,在SharePoint中我们的自定义应用程序和WebPart,都可以使用SPGridView控件,并且可以获得与标准的SharePoint界面相同的外观。

SPGridView控件不支持自动生成栏,所以我们必须明确的使用SPBoundField来绑定每个栏,正如上面的例子所写的那样。然而,产生用于展示的数据确并不困难。我们可以创建一个ADO.NET DataTable或者通过使用query类型的对象返回一个DataTable,例如使用SPSiteDataQuery对象进行一个在网站集范围内的跨多个列表的查询,并将返回的DataTable指定给SPGridView做数据源,是不是很酷?
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章