|
Jednak nie we wszystkich sytuacjach tego typu rozwiązanie jest korzystne. Czasami jest lepiej stworzyć własne, niestandardowe edytory właściwości czyli zdecydować jak ma wyglądać sposób konfiguracji (wygląd obszaru na zrzucie powyżej). Aby to zrobić trzeba wykonać kroki opisane poniżej:
1. Zmodyfikować pole w klasie
[Personalizable(PersonalizationScope.Shared),
WebBrowsable(false),
Category("Dodatkowe ustawienia"),
DefaultValue("1"),
WebDisplayName("Adres zbioru witryn"),
WebDescription("Domyślnie brana jest ścieżka relatywna do aktualnego zbioru witryn")]
public string SiteProperties { get; set; }
2. Stworzyć nową klasę która dziedziczy po System.Web.UI.WebControls.WebParts.EditorPart np.:
public class CategorizationEditorPart : System.Web.UI.WebControls.WebParts.EditorPart
{
public override bool ApplyChanges()
{
throw new NotImplementedException();
}
public override void SyncChanges()
{
throw new NotImplementedException();
}
}
Na przykładzie widać również klasy abstrakcyjne, które należy zaimplementować gdy dziedziczy się z klasy EditorPart. Wzmiankowane metody ustawiają właściwości składnika WebPart lub właściwości edytora składników, odpowiadają za komunikację w dwie strony:
- ApplyChanges - Pobiera dane z ustawień (edytora właściwości) i stosuje je w WebParcie,
- SynsChanges - Pobiera dane z WebParta i wpisuje je jako startowe do edytora właściwości.
3. Aby WebPart wiedział, że ma skorzystać z niestandardowego edytora właściwości należy w klasie WebParta przeciążyć metodę CreateEditorParts(), w której należy dodać informację o używanej klasie jako edytorze właściwości:
public override EditorPartCollection CreateEditorParts()
{
List<EditorPart> editorParts = new List<EditorPart>(1);
EditorPart editor = new CategorizationEditorPart();
editor.ID = this.ID + "_editorCategorization";
editorParts.Add(editor);
EditorPartCollection baseParts = base.CreateEditorParts();
return new EditorPartCollection(baseParts, editorParts);
}
4. W tym kroku kończymy konfigurację klasy edytora właściwości czyli ciąg dalszy punktu 2. W celu wpłynięcia na sposób wyświetlania edytora należy dodatkowo przeciążyć klasę CreateChildControls().
public class CategorizationEditorPart : System.Web.UI.WebControls.WebParts.EditorPart
{
private TextBox txtCategory;
protected override void CreateChildControls()
{
this.Title = "Adres zbioru witryn";
txtCategory = new TextBox();
if (WebPartManager.Personalization.Scope == PersonalizationScope.User)
txtCategory.Enabled = false;
this.Controls.Add(txtCategory);
}
public override bool ApplyChanges()
{
this.EnsureChildControls();
CoreWebPart targetPart = (CoreWebPart)this.WebPartToEdit;
targetPart.Categorization = txtCategory.Text;
return true;
}
public override void SyncChanges()
{
this.EnsureChildControls();
CoreWebPart sourcePart = (CoreWebPart)this.WebPartToEdit;
string category = sourcePart.Categorization;
txtCategory.Text = category;
}
}
5. Rezultat działań pokazany jest poniżej.
|