Custom properties can be included directly by including the properties (GET-SET accessor) in the web part class. Based on the return data type of the property, corresponding UI control will be rendered at run time.
Ex. If there is a property in webpart class as below
private string columnName = “”;
[WebBrowsable(true),
Personalizable(true),
Category("Web Part Settings"),
DisplayName("Site Column name."),
WebDisplayName("Site Column name."),
WebDescription("Site Column name.")]
public string ColumnName
{
get { return columnName; }
set { columnName = value; }
}Note: WebBrowsable and Personalizable attributes should be true.
Above property will be rendered as text box on the property pane.
To display dropdown list if values are static, create a enum containing all static values and use that enum in the get-set method.
Ex:
public enum searchscope
{
All_Sites,
Current_Site
}private searchscope searchScope = searchscope.All_Sites;
[WebBrowsable(true),
Personalizable(true),
Category("Web Part Settings"),
DisplayName("Search scope."),
WebDisplayName("Search scope."),
WebDescription("Detirmines the scope to search.")]public searchscope SearchScope
{
get { return searchScope; }
set
{
searchScope = value;
}
}The above code will diplay a dropdown list with two static values.
Ok, what we have to do if the values are to be dynamically read from sharepoint list or some other source.
1. Create a class that inherit from
Microsoft.SharePoint.WebPartPages.ToolPart2. Create and initialise DropDownList
3. Add the drop down list to the Controls in the overridden method
CreateChildControls.
4. Override
ApplyChanges() method to update the value in the main webpart class.
class CustomToolPart : ToolPart
{
DropDownList ddlTypes = new DropDownList();
:
:
public CustomToolPart()//Constructor
{
this.Title = "Select Type";//Set the title for our custom tool part.
}
protected override void CreateChildControls()
{
PopulatePageTypes(); //Method to populate the drop down list.
Controls.Add(ddlTypes);
}
public override void ApplyChanges()
{
//Logic to update the variable value in main webpart class
}
}
Now in the main web part class,
1. Override
GetToolParts() method
2. Create and initialise our custom class.
3. Add to ToolParts array.
public override ToolPart[] GetToolParts()
{
ToolPart[] toolparts = new ToolPart[3];
WebPartToolPart wptp = new WebPartToolPart(); //WebPart's default properties
CustomPropertyToolPart cptp = new CustomPropertyToolPart(); //Standard Custom properties added to webpart like ColumnName and SearchScope.
CustomToolPart ctp = new CustomToolPart(); // Our custom property ToolPart
toolparts[0] = wptp;
toolparts[1] = cptp;
toolparts[2] = ctp;
return toolparts;
}
That’s all. Deploy the webpart and you can see the dropdown list with dynamic values when you modify the properties of the webpart.