Aggiungere una Web Part tramite codice
L'esempio riportato, per SharePoint 2007 (WSS3 - MOSS), permette di aggiungere dinamicamente da codice C#, una web part di tipo ListView.
Il vantaggio di questo approccio e di poter specificare anche il sito su cui risiede la lista, cosa non possibile da interfaccia utente. In ogni caso è sempre possibile editarla successivamente, da interfaccia utente di SharePoint, ovviamente rimane collegata la sito definito nel codice.
Presta attenzione a due cose:
Il vantaggio di questo approccio e di poter specificare anche il sito su cui risiede la lista, cosa non possibile da interfaccia utente. In ogni caso è sempre possibile editarla successivamente, da interfaccia utente di SharePoint, ovviamente rimane collegata la sito definito nel codice.
Presta attenzione a due cose:
il parametro ListName della ListViewWebPart (ma in generale di tutte le Web Part) non è il nome o il titolo della lista ma il suo Guid (list.ID)
il Guid della lista (parametro ListName) va passato in formato stringa con
listWP.ID.ToString("B").ToUpper()
omettendo il metodo ToString("B") o il metodo metodo ToUpper() si genera un Exception con messaggio Value does not fall within the expected range.
listWP.ID.ToString("B").ToUpper()
omettendo il metodo ToString("B") o il metodo metodo ToUpper() si genera un Exception con messaggio Value does not fall within the expected range.
C#
using System;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebPartPages;
class SgartAddWebPart
{
static void Main(string[] args)
{
using (SPSite site = new SPSite("http://localhost"))
{
//il sito dove mettere la web part
using (SPWeb web = site.OpenWeb("/altrosito"))
{
//dove prendere la lista
SPWeb webWP = site.OpenWeb("/");
SPList listWP = webWP.Lists["Contacts"];
SPView viewWP = listWP.DefaultView;
//prendiamo un riferimento alla pagina che continene le web part
SPLimitedWebPartManager wpm =
web.GetLimitedWebPartManager(
"Default.aspx"
, System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared
);
//creaiamo la web part di tipo list view
ListViewWebPart wp = new ListViewWebPart();
// .ToString("B").ToUpper(); è indispensabile altrimeni da errore
wp.ListName = listWP.ID.ToString("B").ToUpper();
wp.ViewGuid = listWP.DefaultView.ID.ToString("B"); //.ToUpper();
wp.WebId = webWP.ID;
wp.Title = string.Format("Web: {0} - List: {1}"
, webWP.Url, listWP.Title);
//aggiungiamola alla pagina
wpm.AddWebPart(wp, "Right", 0);
//ricordiamoci sempre di fare pulizia
webWP.Dispose();
}
}
}
}