2010-11-18 5 views
2

ich folgendes Problem haben:Verlust der Eigenschaften webpart toolpart Moos 2007

ich ein WebPart mit einem ToolPart erstellt, diese toolpart hat mehrere Steuerelemente (Textbox, Dropdownlist, ...) wenn ich füllen alles und anwenden, es geht alles ok, auch wenn ich ok drücke. Aber wenn ich zurück gehe auf bearbeiten -> Webpart ändern, sind alle meine Daten, die ich eingegeben habe, weg. Wie kann ich das lösen?

Dank

Antwort

1

Hier finden Sie die Werte aus der Toolpart in den Eigenschaften des webpart speichern müssen. Zum Beispiel kann sagen, dass ich eine Zeichenfolge für „Titel“ ... in der webpart definiert eine Eigenschaft speichern möge:

private const string DEFAULT_WPPColumnTitle = "Title"; 
private string _WPPColumnTitle = DEFAULT_WPPColumnTitle; 

[Browsable(false)] 
[WebPartStorage(Storage.Shared)] 
public string WPPColumnTitle 
{ 
    get { return this._WPPColumnTitle; } 
    set { this._WPPColumnTitle = value; } 
} 

ich immer mit dem Präfix „WPP“ all w eb p zu halten Kunst p Eigenschaften zusammen.

Dann wird in der ApplyChanges Überschreibung des Toolpart, den Wert des Steuer sparen (_ddlColumnsTitle) zum webpart (WPPColumnTitle):

/// <summary> 
/// Called by the tool pane to apply property changes to 
/// the selected Web Part. 
/// </summary> 
public override void ApplyChanges() 
{ 
    // get our webpart and set it's properties 
    MyCustomWebPart et = (MyCustomWebPart)ParentToolPane.SelectedWebPart; 
    et.WPPColumnTitle = _ddlColumnsTitle.SelectedValue; 
} 

Schließlich, wenn der Benutzer bereits die Eigenschaften bearbeitet, wollen wir die Toolpart pre werden -gefüllt mit der Konfiguration des Benutzers. Im CreateChildControls() Methode Ihrer Toolpart, initialisieren die Kontrollen:

protected override void CreateChildControls() 
{ 
    try 
    { 
     MyCustomWebPart et = (MyCustomWebPart)ParentToolPane.SelectedWebPart; 

     // ... code to create _ddlColumnsTitle and add it to the Controls 

     // default our dropdown to the user's selection 
     ListItem currentItem = _ddlColumnsTitle.Items.FindByValue(et.WPPColumnTitle); 
     if (null != currentItem) 
     { 
      _ddlColumnsTitle.SelectedValue = currentItem.Value; 
     } 
    } 
    catch (Exception ex) 
    { 
     _errorMessage = "Error adding edit controls. " + ex.ToString(); 
    } 
} 
+0

Ich habe das schon. Aber mein Problem ist, wenn ich mich bewerbe, oder ok drücke, und dann zum Bearbeitungsmodus meines Webpart zurückgehe, sind alle meine Eigenschaften zurück Standard ... Vielleicht muss ich eine Funktion in meinem Webpart überschreiben, wenn ich in den Bearbeitungsmodus gehe? – RubenHerman

+0

Erm - hast du immer noch das Problem? Antwort ist als richtig markiert, also nicht sicher. – Ryan

+0

@Ruben, Sorry vergessen den Teil über die Initialisierung des Toolpart mit der vorherigen Auswahl des Benutzers. Sieht aus, als hättest du es irgendwie schaffen können. Ich habe meine Antwort auf Vollständigkeit aktualisiert :) –

0

den Debugger öffnen und überprüfen, dass die Werte werden immer auf Ihre propertries angewendet auf Apply (d WPPColumnTitle gesetzt ist).

Wenn ja, dann ist das Problem, dass SharePoint serialisiert/deserialisiert den Wert von der Eigenschaft (WPPColumnTitle) in die Datenbank und zurück - überprüfen Sie diese Eigenschaft auf dem Webpart schreiben - sobald Sie die Seite verlassen und kommen Zurück wird es leer sein.

Wenn ja, dann überprüfen Sie Dinge wie diese auf Klasse

[XmlRoot(Namespace = "YourNamespace")] 

und diese (nicht unbedingt notwendig) auf Eigenschaften

[XmlElement(ElementName = "ColumnTitle")] 

ich auch Probleme gesehen haben, wenn Sie Ihre Web-Teil-Klasse Name " WebPart "so nennen Sie es MyWebPart

0

Ich habe es mit dem Hinzufügen einer Eigenschaft in meinem Webpart" IsNeverSet "(bool) gelöst und wenn ich auf die" CreateControls() "von gehen Mein Toolpart, ich bekomme diese Eigenschaft und wenn es falsch ist, lade ich alle Eigenschaften von meinem Webpart und fülle sie im Toolpart. So fand ich es mit Hilfe von Kit Menke