2010-11-18 8 views
2

J'ai le problème suivant:Perte de propriétés webpart toolpart MOSS 2007

J'ai créé un webpart avec un ToolPart, ce toolpart a de multiples contrôles (zone de texte, dropdownlist, ...) lors du remplissage en tout et appliquer, tout va bien, même lorsque j'appuie sur ok. Mais quand je retourne à modifier -> modifier webpart, toutes mes données que j'ai entrées sont parties. Comment puis-je résoudre ce problème?

Merci

Répondre

1

Vous devez enregistrer les valeurs de la Toolpart dans les propriétés du. WebPart Par exemple, disons que je veux sauver une chaîne pour « Titre » ... dans la webpart définir une propriété:

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; } 
} 

J'utilise toujours le préfixe « WPP » pour garder tous les w ebp art p ensemble.

Ensuite, dans la commande prioritaire de Toolpart ApplyChanges, sauf la valeur de la commande (_ddlColumnsTitle) au 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; 
} 

Enfin, si l'utilisateur a modifié les propriétés déjà, nous voulons que le Toolpart à pré -Populated avec la configuration de l'utilisateur. Dans la méthode CreateChildControls() de votre Toolpart, initialiser les contrôles:

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

Je l'ai déjà eu. Mais mon problème est quand j'applique, ou appuie sur ok, et que pour revenir au mode d'édition de mon webpart, toutes mes propriétés sont de retour par défaut ... Peut-être que je dois remplacer une fonction dans mon webpart quand je passe en mode d'édition? – RubenHerman

+0

Erm - avez-vous encore le problème? La réponse est marquée comme correcte, donc pas sûr. – Ryan

+0

@Ruben, Désolé oublié la partie sur l'initialisation de la partie outil avec les sélections précédentes de l'utilisateur. On dirait que vous avez réussi à le faire fonctionner de toute façon. J'ai mis à jour ma réponse pour l'exhaustivité. :) –

0

Ouvrez le débogueur et vérifiez que les valeurs sont appliquées à se vos propertries sur VALIDER (à savoir WPPColumnTitle est réglé). Si tel est le cas, le problème est que SharePoint ne sérialise/désérialise pas la valeur de la propriété (WPPColumnTitle) dans la base de données et ne la vérifie pas en écrivant cette propriété sur le composant WebPart dès que vous quittez la page et venez retour il sera vide.

Si oui, alors vérifier les choses comme celle-ci sur la classe

[XmlRoot(Namespace = "YourNamespace")] 

et ce (pas strictement nécessaire) sur les propriétés

[XmlElement(ElementName = "ColumnTitle")] 

J'ai aussi des problèmes si vous nommez vu votre partie web classe " WebPart "alors appelez-le MyWebPart

0

Je l'ai résolu en ajoutant une propriété dans mon webpart" IsNeverSet "(bool) et quand je vais à la" CreateControls() "de mon outil, j'obtiens cette propriété et si c'est faux, je charge toutes les propriétés de mon webpart et les remplis dans l'outil. Donc, je l'ai trouvé avec l'aide de Kit Menke

Questions connexes