NerdyHearn
Home
Blog

Contact
Mailing List

Software

Active Directory Products
Object Compare
Permission Compare

IPhone Products
Calls To Calendar
SMS To CSV
SMS To Gmail
Voicemail To Gmail

Sites
DocuTerminal
How Long For Me
My Music To Me
SaveMySerials
TypeCount

Blog
Twitter

NerdyHearn - Blog


<< Back To All Blogs

Creating a dynamic SharePoint settings DropDown using a ToolPart

Tuesday, April 21st, 2009

In order to create a dropdown in the settings view of SharePoint it is required that you use an enum with the out-of-box behavior. Each enum item will be presented as an item in the dropdown.

What happens if you want to have a dropdown that is generated dynamically each time the settings window is opened? Enter the world of custom ToolParts.

A toolpart is a sub-section of the settings window when you go to edit the settings of a webpart. Unfortunately they are not easily customizable to flow in with your other settings, so I actually ended up moving all of my settings to the custom toolpart, just for consistency.

Using a custom toolpart requires that you do two things:
1. Create a class that overrides Microsoft.SharePoint.WebPartPages.ToolPart
2. Override the GetToolParts section of your WebPart

I will step through each of these.

In order to create your custom toolpart, you must create a class that overrides Microsoft.SharePoint.WebPartPages.ToolPart. My example code is posted below with comments inline:

public class MyToolPart : Microsoft.SharePoint.WebPartPages.ToolPart
{
// This is the actual dropdown control
System.Web.UI.WebControls.DropDownList m_Dropdown = new System.Web.UI.WebControls.DropDownList();
// Reference to the parent web part
MyWebPart m_Parent = null;

public MyToolPart()
{
// Set the title of our toolpart
this.Title = "Settings";
}

protected override void CreateChildControls()
{
// Get the instance of the web part
m_Parent = (MyWebPart)ParentToolPane.SelectedWebPart;

// Add some items to the dropdown, this is also where you would dynamically populate any items to add
m_Dropdown.Items.Add("One");
m_Dropdown.Items.Add("Two");
m_Dropdown.Items.Add("Three");

// Add the dropdown to the actual toolpart controls
this.Controls.Add(m_Dropdown);

base.CreateChildControls();
}

public override void ApplyChanges()
{
// Set the value on apply. This is using a public property on the webpart
m_Parent.MyValue = m_Dropdown.SelectedValue;
}
}

Now we need to manipulate the web part class so that it works with the toolpart:

public class MyWebPart : Microsoft.SharePoint.WebPartPages.WebPart
{
private string m_MyValue = string.Empty;

// This is what we use to set the value from the toolpart's ApplyChanges() method
public string MyValue
{
get
{
return m_MyValue;
}
set
{
m_MyValue = value;
}
}

protected override void Render(HtmlTextWriter writer)
{
// Normal web part code would be here. You could then use the set value from the toolpart in your code as you normally would with a property from a web part

}

// This is the overwritten method to get the custom toolpart
public override ToolPart[] GetToolParts()
{
// Create an array of toolparts to return
ToolPart[] toReturn = new ToolPart[3];
// Normal webpart properties like size, width, title, etc
WebPartToolPart wptp = new WebPartToolPart();
// Any properties that would come from your webpart
CustomPropertyToolPart cptp = new CustomPropertyToolPart();
// Add your custom toolpart
MyToolPart mtp = new MyToolPart();
toReturn[0] = wptp;
toReturn[1] = cptp;
toReturn[2] = mtp;
return toReturn;
}
}

Compile this as you normally would for a web part, deploy, and you're good to go.

A note about the sequence of layout in these toolparts: They appear in the direction in which they were added. So in the case of my array above, the custom toolpart would appear last in the settings zone.

ToolPartin' Tom Out.

Tags

SharePoint CSharp

Related Blogs

SharePoint Error Craziness: Volume 2
Restoring Specific Documents from a MOSS 2007 Content Database Backup
Deploying Reporting Services WebParts to SharePoint WSS and MOSS
Using MOSS and WSS SharePoint Workflow to Resize Images in an Image Library
Determining if MOSS is Standard or Enterprise

Comments

Tom said on Tuesday, September 15th, 2009 @ 6:29 AM

Hi Gordon,

Thanks for the catches, these are issues I came across while copying the code. Thanks for the feedback!

Tom

Gordon Hickley said on Monday, September 14th, 2009 @ 8:49 PM

Thanks for this example. A see a couple of issues with the code:

MyWebPart view m_Parent = null; - this doesn't look quite right

DynamicGroupDropdown() - this never gets called

Add A Comment

Name:


URL:


Email Address: (not public, used to send notifications on further comments)


Comments:



Enter the text above, except for the 1st and last character:


NerdyHearn - Latest tech news relating to C#, ASP.NET, SharePoint, PHP, general development, and more. DocuTerminal - Online Filing Cabinet solution. Scan, search and archive your paper documents. SaveMySerials - Protect yourself from theft, fire, natural disasters and more by recording your serial numbers My Music To Me - Stream your subsonic music collection to your Sonos wireless system TypeCount - Count how often you type across different computers! ServrTrackr - Monitor your SSL certificates, website uptime, and DNS configurations