SharePoint 使用代码创建 SPWeb/SPSiite/SPWebApplication以及WebPart添加到页面与删除 (三)

在创建的时候注意你要有权限。还有如果要使用请注意合理释放资源,因为我是随便写的 就没有去考虑资合理问题。

首先来写怎么去通过代码创建SPweb,SPWeb与Spsite类似所以我就不详细信息注视了

CreateWeb

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.SharePoint.Administration;
using Microsoft.SharePoint;

namespace TestWF
{
    public partial class CreateWeb : Form
    {
        public Form2 ParentForm { get; set; }
        public CreateWeb()
        {
            InitializeComponent();
        }
        /// <summary>
        /// Farm场
        /// </summary>
        public SPFarm Farm
        {
            get { return SPFarm.Local; }
        }
        /// <summary>
        /// 服务
        /// </summary>
        public SPWebService SPWebService {
            get { return  Farm.Services.GetValue<SPWebService>(""); }
        }
    
        private void CreateApp_Load(object sender, EventArgs e)
        {
            #region 加载应用程序
            List<ComboBoxModel> list = new List<ComboBoxModel>();
            list.Add(new ComboBoxModel() { ID = "1", Name = "--请选择--" });
            foreach (SPWebApplication webApp in SPWebService.WebApplications)
            {
                list.Add(new ComboBoxModel() { ID = webApp.Id.ToString(), Name = webApp.Name });
            }
            this.cbbApp.DataSource = list;
            this.cbbApp.DisplayMember = "Name";
            this.cbbApp.ValueMember = "Id";
            this.cbbApp.SelectedValueChanged += cbbApp_SelectedValueChanged; 
            #endregion
       
            #region 加载模板选择
            //填写管理中心地址
            SPSite site = new SPSite("http://jason-pc:5901/");
            SPWeb web = site.OpenWeb();
            //获取所有模版
            SPWebTemplateCollection templates = web.GetAvailableWebTemplates(2052);
            TreeNode node = new TreeNode();
            node.Text = "协作";
            BindTemplateTree(node, templates);
            this.tvTemp.Nodes.Add(node);

            node = new TreeNode();
            node.Text = "会议";
            BindTemplateTree(node, templates);
            this.tvTemp.Nodes.Add(node);


            node = new TreeNode();
            node.Text = "企业";
            BindTemplateTree(node, templates);
            this.tvTemp.Nodes.Add(node);

            node = new TreeNode();
            node.Text = "发布";
            BindTemplateTree(node, templates);
            this.tvTemp.Nodes.Add(node);

            node = new TreeNode();
            node.Text = "自定义";
            BindTemplateTree(node, templates);
            this.tvTemp.Nodes.Add(node);
            web.Close();
            site.Close();
            #endregion
 
        }
        /// <summary>
        /// 更改URL
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void cbbApp_SelectedValueChanged(object sender, EventArgs e)
        {
      
            if (this.cbbApp.SelectedValue != null&&this.cbbApp.SelectedValue!="1")
            {
              SPWebApplication webApp = SPWebService.WebApplications[new Guid(this.cbbApp.SelectedValue.ToString())];
              #region 加载站点集
                List<ComboBoxModel> sites = new List<ComboBoxModel>();
                sites.Add(new ComboBoxModel() { ID = "1", Name = "--请选择--" });
                foreach (SPSite site in webApp.Sites)
                {
                    sites.Add(new ComboBoxModel() { ID = site.ID.ToString(), Name = site.Url });
               
                }

                this.cbSites.DataSource = sites;
                this.cbSites.DisplayMember = "Name";
                this.cbSites.ValueMember = "Id";
                this.cbSites.SelectedValueChanged += cbSites_SelectedValueChanged;
                #endregion
 
            }
        }
        void cbSites_SelectedValueChanged(object sender, EventArgs e)
        {
            ComboBox cm = sender  as ComboBox;
            if (cm.SelectedValue != null&&cm.SelectedValue!="1")
            {
                using (SPSite site = new SPSite(new Guid(cm.SelectedValue.ToString())))
                {
                    cm.Tag = site;
                }
            }
           
        }
        private void button1_Click(object sender, EventArgs e)
        {
            this.Cursor = Cursors.WaitCursor;
            if (this.lbtemp.Tag == null)
            {
                MessageBox.Show("你未选择模版!");
            }
            if (this.cbSites.Tag == null)
            {
                MessageBox.Show("你未选择站点集!");
            }
            try
            {
                SPWebTemplate t = this.lbtemp.Tag as SPWebTemplate;
                SPSite site = this.cbSites.Tag as SPSite;
                SPWeb web = site.AllWebs.Add(this.tbUrl.Text.Trim(), this.tbTitel.Text.Trim(), this.tbDesc.Text.Trim(), 2052,t, false, false);
                web.Close();
                site.Close();
            }
            catch (Exception ex)
            {

                MessageBox.Show("创建站点失败:" + ex.Message);
            }
            this.Cursor = Cursors.Default;
            ParentForm.BindTree();
        }
        void BindTemplateTree(TreeNode node,SPWebTemplateCollection temp)
        {
          
            foreach (SPWebTemplate t in temp)
            {
                  if(node.Text==t.DisplayCategory)
                  {
                         node.Nodes.Add(new TreeNode() { Text = t.Title, Tag = t });
                  }
            }    
        }
        private void tvTemp_AfterSelect(object sender, TreeViewEventArgs e)
        {
            this.lbtemp.Text="你已经选中:"+e.Node.Text;
            this.lbtemp.Tag = e.Node.Tag;
            if (e.Node.Tag != null)
            {
                SPWebTemplate t = e.Node.Tag as SPWebTemplate;
                lbDesc.Text = t.Description;
            }
        }
    }
}
后面写怎么去页面上添加与删除WebPart:
CreateWebPartdeleteWebPart
如上图一个添加WebPart一个删除已经有的WebPart,这里需要注意的是我目前是把页面的地址写死了
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.SharePoint.Administration;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebPartPages;
using System.Web.UI.WebControls.WebParts;
using System.Globalization;
using System.Xml;

namespace TestWF
{
    public partial class AddWebPart : Form
    {
        public Form2 ParentForm { get; set; }
        public AddWebPart()
        {
            InitializeComponent();
        }
        /// <summary>
        /// Farm场
        /// </summary>
        public SPFarm Farm
        {
            get { return SPFarm.Local; }
        }
        /// <summary>
        /// 服务
        /// </summary>
        public SPWebService SPWebService {
            get { return  Farm.Services.GetValue<SPWebService>(""); }
        } 
        private void CreateApp_Load(object sender, EventArgs e)
        {
            #region 加载应用程序
            List<ComboBoxModel> list = new List<ComboBoxModel>();
            list.Add(new ComboBoxModel() { ID = "1", Name = "--请选择--" });
            foreach (SPWebApplication webApp in SPWebService.WebApplications)
            {
                list.Add(new ComboBoxModel() { ID = webApp.Id.ToString(), Name = webApp.Name });
            }
            this.cbbApp.DataSource = list;
            this.cbbApp.DisplayMember = "Name";
            this.cbbApp.ValueMember = "Id";
            this.cbbApp.SelectedValueChanged += cbbApp_SelectedValueChanged; 
            #endregion
 
        }
        /// <summary>
        /// 加载站点集
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void cbbApp_SelectedValueChanged(object sender, EventArgs e)
        {
            if (this.cbbApp.SelectedValue != null&&this.cbbApp.SelectedValue!="1")
            {
                SPWebApplication webApp = SPWebService.WebApplications[new Guid(this.cbbApp.SelectedValue.ToString())];
               #region 加载站点集
                List<ComboBoxModel> sites = new List<ComboBoxModel>();
                sites.Add(new ComboBoxModel() { ID = "1", Name = "--请选择--" });
                foreach (SPSite site in webApp.Sites)
                {
                    sites.Add(new ComboBoxModel() { ID = site.ID.ToString(), Name = site.Url });
               
                }

                this.cbSites.DataSource = sites;
                this.cbSites.DisplayMember = "Name";
                this.cbSites.ValueMember = "Id";
                this.cbSites.SelectedValueChanged += cbSites_SelectedValueChanged;
                #endregion
            }
        }
        /// <summary>
        /// 加载站点
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void cbSites_SelectedValueChanged(object sender, EventArgs e)
        {
            ComboBox cm = sender  as ComboBox;
            if (cm.SelectedValue != null&&cm.SelectedValue!="1")
            {
                using (SPSite site = new SPSite(new Guid(cm.SelectedValue.ToString())))
                {
                    cm.Tag = site;
                    #region 加载站点
                    List<ComboBoxModel> webs = new List<ComboBoxModel>();
                    webs.Add(new ComboBoxModel() { ID = "1", Name = "--请选择--" });
                    foreach (SPWeb web in site.AllWebs)
                    {
                        webs.Add(new ComboBoxModel() { ID = web.ID.ToString(), Name = web.Title });

                    }

                    this.cbbWeb.DataSource = webs;
                    this.cbbWeb.DisplayMember = "Name";
                    this.cbbWeb.ValueMember = "Id";
                    this.cbbWeb.SelectedValueChanged += cbbWeb_SelectedValueChanged;
                    #endregion
                } 
            } 
        } 
        /// <summary>
        /// 选择站点
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void cbbWeb_SelectedValueChanged(object sender, EventArgs e)
        {
              ComboBox cm = sender  as ComboBox;
              if (cm.SelectedValue != null && cm.SelectedValue != "1"&& this.cbSites.Tag!=null)
              {
                  using (SPSite site = new SPSite(new Guid(this.cbSites.SelectedValue.ToString())))
                  {
                      SPWeb web=site.AllWebs[new Guid(cm.SelectedValue.ToString())];
                      //本来在这里想继续加载站点中的所有页面的,由于暂时没找到怎么获取所有页面所以写死了
                      this.cbbPage.SelectedValueChanged += cbbPage_SelectedValueChanged;
                     
                      cm.Tag = web;

                      this.Cursor = Cursors.WaitCursor;
                      try
                      {
                          this.tvTemp.Nodes.Clear();
                          //根据站点获取所有WebPart并且加入树中
                          SPLimitedWebPartManager manger = web.GetLimitedWebPartManager("SitePages/Home.aspx", PersonalizationScope.Shared);
                          for (int i = 0; i < manger.WebParts.Count; i++)
                          {
                              TreeNode node = new TreeNode();
                              node.Text = manger.WebParts[i].Title;

                              node.Tag = manger.WebParts[0].ID;
                              this.tvTemp.Nodes.Add(node);
                          }
                      }
                      catch (Exception ex)
                      {
                          MessageBox.Show("错误:"+ex.Message);
                      } 
                      this.Cursor = Cursors.Default;
                  }

              }
        }
        /// <summary>
        /// 本来在这里想继续加载站点中的所有页面的,由于暂时没找到怎么获取所有页面所以写死了
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void cbbPage_SelectedValueChanged(object sender, EventArgs e)
        {
            ComboBox cm = sender  as ComboBox;
            if (cm.SelectedValue != null && cm.SelectedValue != "1" && this.cbbWeb.Tag != null)
            {
                SPWeb web = this.cbbWeb.Tag as SPWeb;
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            this.Cursor = Cursors.WaitCursor;
            if (this.tvTemp.Tag == null)
            {
                MessageBox.Show("你未选择WebPart!");
                return;

            }

            if (this.cbbWeb.Tag == null)
            {
                MessageBox.Show("你未选择站点集!");
                return;
            }
            try
            {
                string ID= this.tvTemp.Tag.ToString();
                SPWeb web = this.cbbWeb.Tag as SPWeb;

                try
                {
                    ///删除选中的一个WebPart
                    SPLimitedWebPartManager manger = web.GetLimitedWebPartManager("SitePages/Home.aspx", PersonalizationScope.Shared);
                    for (int i = 0; i < manger.WebParts.Count; i++)
                    {
                        if (manger.WebParts[i].ID == ID)
                        {
                            
                            manger.DeleteWebPart(manger.WebParts[i]);

                        }
                    }

                    MessageBox.Show("删除WebPart成功!");
                }
                catch (Exception ex)
                {
                    MessageBox.Show("错误:" + ex.Message);
                } 
               
            }
            catch (Exception ex)
            {

                MessageBox.Show("失败:" + ex.Message);
            }
            this.Cursor = Cursors.Default;
            ParentForm.BindTree();
        }
        private void tvTemp_AfterSelect(object sender, TreeViewEventArgs e)
        {
            this.tvTemp.Tag = null;
            if (e.Node.Tag != null)
            {
                this.tvTemp.Tag =  e.Node.Tag;
                this.lbPart.Text = "你已经选中了:" + e.Node.Text;
               
                
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            this.Cursor = Cursors.WaitCursor;
            if (this.tvTemp.Tag == null)
            {
                MessageBox.Show("你未选择WebPart!");
                return;

            }
            if (this.cbbWeb.Tag == null)
            {
                MessageBox.Show("你未选择站点集!");
                return;
            }
            try
            {
                //获取选中的WebPart列表中的其中一个SPFile
                SPFile file =this.tvTemp.Tag as  SPFile  ;
                SPWeb web = this.cbbWeb.Tag as SPWeb;
                 try
                {
                    //获取一个SPLimitedWebPartManager管理类
                 SPLimitedWebPartManager manger = web.GetLimitedWebPartManager("SitePages/Home.aspx", PersonalizationScope.Shared);

                 //创建一个WebPart 部件
                 XmlReader xmlReader = new XmlTextReader(file.OpenBinaryStream());
                 string errorMessage;
                 System.Web.UI.WebControls.WebParts.WebPart webPart = manger.ImportWebPart(xmlReader, out errorMessage);
                 
                 //将WebPart加载到页面上 其中后两个参数是设置页面位置的
                 manger.AddWebPart(webPart,"Left",2);
                  
                 MessageBox.Show("添加WebPart成功!");
                }
                catch (Exception ex)
                {
                    MessageBox.Show("错误:" + ex.Message);
                }

            }
            catch (Exception ex)
            {

                MessageBox.Show("失败:" + ex.Message);
            }
            this.Cursor = Cursors.Default;
            ParentForm.BindTree();

        }
         /// <summary>
        /// 加载页面已经有的WebPart列表
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {
            this.tvTemp.Nodes.Clear();
            ComboBox cm = this.cbbWeb as  ComboBox;
            if (cm.SelectedValue != null && cm.SelectedValue != "1" && this.cbSites.Tag != null)
            {
                using (SPSite site = new SPSite(new Guid(this.cbSites.SelectedValue.ToString())))
                {
                    SPWeb web = site.AllWebs[new Guid(cm.SelectedValue.ToString())];

                    this.cbbPage.SelectedValueChanged += cbbPage_SelectedValueChanged;
                    cm.Tag = web;

                    this.Cursor = Cursors.WaitCursor;
                    try
                    {
                        //根据站点获取所有WebPart并且加入树中
                        SPLimitedWebPartManager manger = web.GetLimitedWebPartManager("SitePages/Home.aspx", PersonalizationScope.Shared);
                        for (int i = 0; i < manger.WebParts.Count; i++)
                        {
                            TreeNode node = new TreeNode();
                            node.Text = manger.WebParts[i].Title;
                      
                            node.Tag = manger.WebParts[0].ID;
                            this.tvTemp.Nodes.Add(node);
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("错误:" + ex.Message);
                    } 
                   
                    this.Cursor = Cursors.Default;
                }

            }
        }

        /// <summary>
        /// 加载WebPart列表
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void radioButton2_CheckedChanged(object sender, EventArgs e)
        {

            if (this.cbbWeb.Tag != null  && this.cbSites.Tag != null)
            {
                this.Cursor = Cursors.WaitCursor;
                using (SPSite site = new SPSite(new Guid(this.cbSites.SelectedValue.ToString())))
                {
                    SPWeb web = site.AllWebs[new Guid(cbbWeb.SelectedValue.ToString())];

                    //获取所有的WebPart的SPList列表 注意这里返回的还是不是WebPart
                    SPList list = web.GetCatalog(SPListTemplateType.WebPartCatalog);
                    for (int i = 0; i < list.ItemCount; i++)
                    {
                        TreeNode node = new TreeNode();
                        node.Text = list.Items[i].File.Title;
                        node.Tag = list.Items[i].File;
                        this.tvTemp.Nodes.Add(node);
                    }
                  

                }
                this.Cursor = Cursors.Default;
            }
        }
 
    }
 
}

以上就是怎么去删除和添加WebPart ,至于移动WebPart也差不多我就没写。

如果有更高的方法请大家告诉我。

原文地址:https://www.cnblogs.com/StudyHard/p/3070624.html