zoukankan      html  css  js  c++  java
  • MSDN Visual系列:用WSSv3中的SPGridView控件来显示数据

    原文:http://msdn2.microsoft.com/en-us/library/bb466219.aspx

    开发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做数据源,是不是很酷?

    查看视频
  • 相关阅读:
    TreeView控件
    俄罗斯套娃
    c#文件操作
    c# 操作excle
    vs2010启动越来越慢解决方法
    c# 操作excle[转]
    c# 命名空间别名
    C# openfiledialog的使用
    c# 获取项目根目录方法
    jquery操作复选框(checkbox)的12个小技巧总结
  • 原文地址:https://www.cnblogs.com/Sunmoonfire/p/758829.html
Copyright © 2011-2022 走看看