Eigene Controls für Webparteigenschaften

Manchmal erstellt man einen WebPart, der eine spezielle Konfiguration zur Bewältigung seiner Aufgabe benötigt.
Beispielsweise soll er Daten einer Liste in aufbereiteter Form anzeigen.

Nun wäre es schön, wenn die Auswahl der Liste nicht über eine Textbox, in welche man ihren Namen einträgt, erfolgt, sondern über eine Combobox die alle passenden Listen zur Auswahl anbietet.

Hierfür wird ein sogenannter Toolpart verwendet. Ein Toolpart erbt von der Klasse "Microsoft.SharePoint.WebPartPages.ToolPart" und stellt einen selbst definierten Eingabebereich in der Toolbox des Webparts zur Verfügung.

Beispiel für den Aufbau eines Toolparts:
 1 internal class TPWebTemplates:Microsoft.SharePoint.WebPartPages.ToolPart
2 {
3 //wird später zum Auslesen des Wertes verwendet
4 private string inputIDListName;
5
6 public TPWebTemplates()
7 {
8 this.Title = "Template";
9 this.Init += new EventHandler(InitObject);
10 }
11 private void InitObject(object sender, System.EventArgs e)
12 {
13 //eindeutige ID für das Asuwerten des Steuerelementes
14 inputIDListName = this.UniqueID + "messageList";
15 }
16
17 /// <summary>
18 /// Auslesen der Änderungen
19 /// </summary>
20 public override void ApplyChanges()
21 {
22 WPSample wp1 = (WPSample)
23 this.ParentToolPane.SelectedWebPart;
24
25 value = Page.Request.Form[inputIDListName];
26 if (!String.IsNullOrEmpty(value)) wp1.ListName = value;
27 }
28
29
30 protected override void RenderToolPart(System.Web.UI.HtmlTextWriter output)
31 {
32 output.Write("Template: ");
33 System.Web.UI.WebControls.DropDownList cboToolpart = new System.Web.UI.WebControls.DropDownList();
34
35 foreach (Microsoft.SharePoint.SPList list in Microsoft.SharePoint.SPContext.Current.Web.Lists)
36 {
37 if (list.Hidden == false) //Nur Listen anzeigen, die nicht versteckt sind
38 {
39 System.Web.UI.WebControls.ListItem li = new System.Web.UI.WebControls.ListItem();
40 li.Text = list.Title;
41 li.Value = list.Title;
42 cboToolpart.Items.Add(li);
43 }
44 }
45 //Hier kann Code zum Anzeigen eines bereits gewählten Wertes folgen
46 }
47 }



Dieser Toolpart referenziert jetzt den WebPart WPSample mit der Property ListName. Besser wäre es hier ein enstprechendes Interface zu vereinbaren.

Der WebPart selbst wird ganz "normal" erstellt.
Einziger Unterschied ist die Überladung der Methode "GetToolParts" durch welche wir den Sharepoint über den zusätzlich darzustellenden Toolpart informieren.

Beispiel:
1 public override Microsoft.SharePoint.WebPartPages.ToolPart[] GetToolParts()
2 {
3 List<Microsoft.SharePoint.WebPartPages.ToolPart> parts = new List<Microsoft.SharePoint.WebPartPages.ToolPart>();
4 parts.Add(new Microsoft.SharePoint.WebPartPages.WebPartToolPart());
5 parts.Add(new Microsoft.SharePoint.WebPartPages.CustomPropertyToolPart());
6 parts.Add(new TPWebTemplates());
7 return parts.ToArray();
8 }


Im Ergebniss sieht das dann in etwa so aus:



Denkbar sind auch komplexere Eingaben z.B. für das Erstellen von Datenbankverbindungen oder Abfragen von WebServices.

Keine Kommentare: