设为首页 收藏本站
查看: 945|回复: 0

[经验分享] 将sharepoint中的跨网站、列表查询的结果用SPGridView分页显示

[复制链接]

尚未签到

发表于 2015-9-29 08:02:36 | 显示全部楼层 |阅读模式
  我是用户控件(也就是ascx控件)写的查询界面和显示结果,然后用QuickPart包装了一下,这样做的好处就是复杂界面可以使用拖动控件来开发,要比写代码来的直观,不足之处就是调试困难,但是昨天我的同事发现了一个调试的好办法,很不错,下一篇我会写出来。

需求是开发一个公司动态发布系统,我将未发布动态,已发布动态和已过期动态分三个列表存放,但是普通用户查询的时候需要查询的结果是从已发布动态和已过期动态两个列表库中来的数据。

下面是ascx界面的示例代码



<%@ Control Language="C#" AutoEventWireup="true" CodeFile="CorpTrendQuery3.ascx.cs" Inherits="CorpTrendQuery3" %>
<%@ Register Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
    Namespace="Microsoft.SharePoint.WebControls" TagPrefix="cc1" %>
   
<div><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button"
        style="width: 56px" />
<br /></div>
<div>

<br />
<cc1:SPGridView ID="SPGridView1" runat="server" AutoGenerateColumns="false">
</cc1:SPGridView>
<asp:LinkButton ID="LinkButton_Pre" runat="server"
    onclick="LinkButton_Pre_Click">上一页</asp:LinkButton><asp:LinkButton ID="LinkButton_Next" runat="server"
    onclick="LinkButton_Next_Click">下一页</asp:LinkButton>
    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</div>

  
下面是这个ascx控件的后台cs代码



using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Xml;
using System.Xml.XPath;
using System.Text;
using System.IO;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Utilities;
using Microsoft.SharePoint.WebControls;

public partial class CorpTrendQuery3 : System.Web.UI.UserControl
{
    private string strQuery = null;

    private SPSite site = null;
    public SPSite SP_Site
    {
        get
        {
            if (site == null)
                site = new SPSite("http://virus/sites/intranet");
            return site;
        }
    }
    private SPWeb web = null;
    public SPWeb SP_Web
    {
        get
        {
            if (web == null)
            {
                web = SP_Site.OpenWeb("team");

            }
            return web;
        }

    }

    private PagedDataSource pds = new PagedDataSource();
    private DataTable dt;

    private int CurrentPage
    {
        get
        {
            if (this.ViewState["CurrentPage"] == null)
            {
                return 0;
            }
            else
            {
                return Convert.ToInt32(this.ViewState["CurrentPage"].ToString());
            }
        }
        set
        {
            this.ViewState["CurrentPage"] = value;
        }
    }
    /// <summary>
    /// 添加一个查询节点
    /// </summary>
    /// <param name="strQuery">整个查询的where节点字符串</param>
    /// <param name="nodeName">要添加的查询节点的名称</param>
    /// <param name="name">查询节点中的查询列的名称</param>
    /// <param name="type">查询列的类型</param>
    /// <param name="value">查询节点中的查询列的值</param>
    /// <returns>整合之后的查询条件</returns>
    private string xmlAttributeUpdate(string strQuery, string nodeName, string name,string type, string value)
    {
        XmlDocument docQuery = new XmlDocument();
        docQuery.LoadXml(strQuery);
        StringWriter sw = new StringWriter();

        XmlNode andNode = docQuery.SelectSingleNode("/Where/And");
        if (andNode == null)
        {
            //不存在And节点,说明原来是一个查询条件,
            //要添加一个条件的话,就要先添加and节点,然后用and节点将以前的条件和现在的条件包起来
            XmlNode whereChildNode = docQuery.DocumentElement.ChildNodes[0];

            docQuery.DocumentElement.RemoveAll();
            //添加and节点
            XmlElement xe = docQuery.CreateElement("And");
            XmlNode whereNode = docQuery.DocumentElement;
            whereNode.AppendChild(xe);
            //添加原来的查询节点
            XmlNode and1Node = docQuery.SelectSingleNode("/Where/And");
            and1Node.AppendChild(whereChildNode);
            //添加新查询节点
            XmlElement conditionNode = docQuery.CreateElement(nodeName);
            and1Node.AppendChild(conditionNode);

            XmlElement nameNode = docQuery.CreateElement("FieldRef");
            nameNode.SetAttribute("Name", name);
            conditionNode.AppendChild(nameNode);

            XmlElement valueNode = docQuery.CreateElement("Value");
            valueNode.SetAttribute("Type", type);
            if (nodeName.Equals("Geq") || nodeName.Equals("Leq"))
                valueNode.InnerText = value + "Z";
            else
                valueNode.InnerText = value;
            conditionNode.AppendChild(valueNode);

         
            return docQuery.DocumentElement.OuterXml;

        }
        else
        {
            //存在and节点,再用一个and节点将原来的and节点和新条件包起来
            docQuery.DocumentElement.RemoveAll();

            //添加and节点
            XmlElement xe = docQuery.CreateElement("And");
            XmlNode whereNode = docQuery.DocumentElement;
            whereNode.AppendChild(xe);
            //添加原来的查询节点
            XmlNode and1Node = docQuery.SelectSingleNode("/Where/And");
            and1Node.AppendChild(andNode);
            //添加新查询节点
            XmlElement conditionNode = docQuery.CreateElement(nodeName);
            and1Node.AppendChild(conditionNode);

            XmlElement nameNode = docQuery.CreateElement("FieldRef");
            nameNode.SetAttribute("Name", name);
            conditionNode.AppendChild(nameNode);

            XmlElement valueNode = docQuery.CreateElement("Value");
            valueNode.SetAttribute("Type", type);
            if (nodeName.Equals("Geq") || nodeName.Equals("Leq"))
                valueNode.InnerText = value + "Z";
            else
                valueNode.InnerText = value;
            conditionNode.AppendChild(valueNode);
            return docQuery.DocumentElement.OuterXml;


        }
    }
    private string getQueryString()
    {
        string corpTrendTitle;
        string corpTrendContent;
        DateTime corpTrendReleaseDT = new DateTime();
        DateTime corpTrendExpireDT = new DateTime();
        if (!string.IsNullOrEmpty(TextBox_CorpTrendTitle.Text))
        {
            if (strQuery == null)
            {
                strQuery = @"<Where>
                              <Contains>
                                 <FieldRef Name='Title' />
                                 <Value Type='Text'>" + TextBox_CorpTrendTitle.Text.Trim() + @"</Value>
                              </Contains>
                           </Where>";
            }
            else
            {
                strQuery = xmlAttributeUpdate(strQuery, "Contains", "Title","Text", TextBox_CorpTrendTitle.Text.Trim());
            }
        }
        if (!string.IsNullOrEmpty(TextBox_CorpTrendContent.Text))
        {
            if (strQuery == null)
            {
                strQuery = string.Format(@"<Where>
                              <Contains>
                                 <FieldRef Name='{0}' />
                                 <Value Type='Text'>" + TextBox_CorpTrendContent.Text.Trim() + @"</Value>
                              </Contains>
                           </Where>", SP_Web.Lists["未发布公告"].Fields["公告内容"].InternalName);
            }
            else
            {
                strQuery = xmlAttributeUpdate(strQuery, "Contains", "PublishingPageContent","Text", TextBox_CorpTrendContent.Text.Trim());
            }
        }
        if (!this.CorpTrendReleaseDTBegin.IsDateEmpty && !this.CorpTrendReleaseDTEnd.IsDateEmpty)
        {
            if (strQuery == null)
            {
                strQuery = string.Format(@"<Where>
                                              <And>
                                                 <Geq>
                                                    <FieldRef Name='{0}' />
                                                    <Value Type='DateTime'>{1}Z</Value>
                                                 </Geq>
                                                 <Leq>
                                                    <FieldRef Name='{2}' />
                                                    <Value Type='DateTime'>{3}Z</Value>
                                                 </Leq>
                                              </And>
                                           </Where>", SP_Web.Lists["未发布公告"].Fields["公告发布时间"].InternalName,
                                                CorpTrendReleaseDTBegin.SelectedDate.ToString(),
                                                SP_Web.Lists["未发布公告"].Fields["公告发布时间"].InternalName,
                                                CorpTrendReleaseDTEnd.SelectedDate.ToString());
            }
            else
            {
                strQuery = xmlAttributeUpdate(strQuery, "Geq", SP_Web.Lists["未发布公告"].Fields["公告发布时间"].InternalName,"Text", CorpTrendReleaseDTBegin.SelectedDate.ToString());
                strQuery = xmlAttributeUpdate(strQuery, "Leq", SP_Web.Lists["未发布公告"].Fields["公告发布时间"].InternalName, "Text", CorpTrendReleaseDTEnd.SelectedDate.ToString());
            }
        }
        if (!this.CorpTrendExpireDTBegin.IsDateEmpty && !this.CorpTrendExpireDTEnd.IsDateEmpty)
        {
            if (strQuery == null)
            {
                strQuery = string.Format(@"<Where>
                                              <And>
                                                 <Geq>
                                                    <FieldRef Name='{0}' />
                                                    <Value Type='DateTime'>{1}Z</Value>
                                                 </Geq>
                                                 <Leq>
                                                    <FieldRef Name='{2}' />
                                                    <Value Type='DateTime'>{3}Z</Value>
                                                 </Leq>
                                              </And>
                                           </Where>", SP_Web.Lists["未发布公告"].Fields["公告过期时间"].InternalName,
                                                CorpTrendExpireDTBegin.SelectedDate.ToString(),
                                                SP_Web.Lists["未发布公告"].Fields["公告过期时间"].InternalName,
                                                CorpTrendExpireDTEnd.SelectedDate.ToString());
            }
            else
            {
                strQuery = xmlAttributeUpdate(strQuery, "Geq", SP_Web.Lists["未发布公告"].Fields["公告过期时间"].InternalName, "DateTime", CorpTrendExpireDTBegin.SelectedDate.ToString());
                strQuery = xmlAttributeUpdate(strQuery, "Leq", SP_Web.Lists["未发布公告"].Fields["公告过期时间"].InternalName, "DateTime", CorpTrendExpireDTEnd.SelectedDate.ToString());
            }
        }
      
        return strQuery;
     
    }

    private void doPaging(string strQuery)
    {

        SPSiteDataQuery query = new SPSiteDataQuery();
        query.Webs = "<Webs Scope=\"Recursive\" ></Webs>";
        query.Lists = string.Format("<Lists><List ID='{0}' /><List ID='{1}' /></Lists>", SP_Web.Lists["已过期动态"].ID, SP_Web.Lists["已发布动态"].ID);
      
        query.ViewFields = string.Format("<FieldRef Name='Title' /><FieldRef Name='FileRef' /><FieldRef Name='EncodedAbsUrl' /><FieldRef Name='{0}' /><FieldRef Name='{1}' />",
            SP_Web.Lists["已过期动态"].Fields["动态发布时间"].InternalName, SP_Web.Lists["已过期动态"].Fields["动态过期时间"].InternalName);

        if (strQuery == null)
            query.Query = string.Empty;
        else
            query.Query = strQuery;

        dt = web.GetSiteData(query);

        pds = new PagedDataSource();
        pds.DataSource = dt.DefaultView;
        pds.AllowPaging = true;
        pds.PageSize = 4;

        Label1.Text = "总共:" + pds.PageCount.ToString() + "页";
        
        pds.CurrentPageIndex = CurrentPage;

        LinkButton_Next.Enabled = !pds.IsLastPage;
        LinkButton_Pre.Enabled = !pds.IsFirstPage;

        initSPGridView();

        SPGridView1.DataSource = pds;
        SPGridView1.DataBind();

    }
    public CorpTrendQuery3()
    {
    }
    private void initSPGridView()
    {
        SPGridView1.Columns.Clear();

        HyperLinkField linkTitle = new HyperLinkField();
        linkTitle.DataTextField = "Title";
        linkTitle.HeaderText = "主题";
        linkTitle.DataNavigateUrlFields = new string[] { "FileRef" };
        linkTitle.DataNavigateUrlFormatString = "http://virus/{0}";
        SPGridView1.Columns.Add(linkTitle);

        SPBoundField col = new SPBoundField();
        col.DataField = "Title";
        col.HeaderText = "Title";

        SPGridView1.Columns.Add(col);

        col = new SPBoundField();
        col.DataField = "_x52a8__x6001__x53d1__x5e03__x65f6__x95f4_";
        col.HeaderText = "动态发布时间";
        SPGridView1.Columns.Add(col);

        col = new SPBoundField();
        col.DataField = "_x52a8__x6001__x8fc7__x671f__x65f6__x95f4_";
        col.HeaderText = "动态过期时间";
        SPGridView1.Columns.Add(col);

    }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            this.TextBox_CorpTrendTitle.Text = string.Empty;
            //site = SPContext.Current.Site;
            //web = SPContext.Current.Web;
           doPaging(getQueryString());
        }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        this.ViewState["CurrentPage"] = null;
        //CurrentPage = 0;
        doPaging(getQueryString());

    }

    protected void LinkButton_Pre_Click(object sender, EventArgs e)
    {

        CurrentPage -= 1;
        doPaging(getQueryString());
    }
    protected void LinkButton_Next_Click(object sender, EventArgs e)
    {
        CurrentPage += 1;
        doPaging(getQueryString());
    }
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-120161-1-1.html 上篇帖子: Sharepoint 2010 虚拟机的安装 下篇帖子: Silverlight + WCF + Sharepoint(Silverlight Web Part) 问题集合
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表