Take the 2-minute tour ×
SharePoint Stack Exchange is a question and answer site for SharePoint enthusiasts. It's 100% free, no registration required.

I created a webpart with custom properties but once the webpart is added and the settings changed, it doesn't take effect until a publish or check in share draft. Clicking in OK or Apply in the webpart settings doesn't save the properties.

private string _ListSite="/";
private string _ListName = "Quick Links";

[WebBrowsable(true)]
[WebDisplayName("List site")]
[SPWebCategoryName("Quick Links Settings")]
[WebPartStorage(Storage.Shared)]
[WebDescription("Name of the site where the links list is")]
[Personalizable(PersonalizationScope.Shared)]
public string ListSite
{
   get { return _ListSite; }
   set { _ListSite = value; }
}

[WebBrowsable(true)]
[WebDisplayName("List name")]
[SPWebCategoryName("Quick Links Settings")]
[WebPartStorage(Storage.Shared)]
[WebDescription("Name of the list to use")]
[Personalizable(PersonalizationScope.Shared)]
public string ListName
{
    get { return _ListName; }
    set { _ListName = value; }
}
share|improve this question
add comment

2 Answers

up vote 1 down vote accepted

Calling the method that needs the custom properties updated in CreateChildControls() has done the job for me.

Example:

protected override void CreateChildControls()
{
    base.CreateChildControls();

    try
    {
        _data = GetLinksData();
    }
    catch (Exception ex)
    {
        //exception code
    }

}

private SPListItemCollection GetLinksData()
{
   //Method that uses the custom properties
   //this.ListSite has the new value when OK or Apply has been clicked in the webpart settings
   //using this.ListSite! 
}
share|improve this answer
add comment

Ensure that you derive your webpart from "System.Web.UI.WebControls.WebParts.WebPart" and need not use attributes like "SPWebCategoryName" or "WebPartStorage" .The below attributes are sufficient for a webpart property to work as expected:

[Personalizable(PersonalizationScope.Shared)]
[WebBrowsable(true)]
[Category("Quick Links Settings")]
[WebDisplayName("List site")]  
[Description("Name of the site where the links list is")] 

If, for some reason, you drive from Microsoft.SharePoint.WebPartPages.WebPart and you want save the properties in code, you can use WebPart.SaveProperties as below

   // Set Title property of webpart  to the value in _mytextbox control.
    public void _mybutton_click (object sender, EventArgs e)
    {
        this.Title = _mytextbox.Value;
        try
        {
            this.SaveProperties=true;
        }
        catch
        {
            Caption = "Error... Could not save property.";
        }
    }
share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.