Overview

O desenvolvimento de web parts é uma tarefa bem comum em projetos SharePoint, mas a que nível de customização podemos chegarm com web parts? Consigo passar parâmetros para elas e ter o seu comportamento baseado nesses parâmetros?

Neste post vamos ver como criar propriedades para as web parts e visual web parts, o resultado no final do post será como exibido na imagem 01, a propriedade “Nome da Lista”.

Imagem 01

Solução

No exemplo vou mostrar sobre a visual web part do SharePoint 2010, mas se aplica às web parts padrão do ASP.NET também.

Criei um projeto do tipo Visual Web Part no Visual Studio 2010 com o nome TrabalhandoComPropriedades, o Visual Studio automaticamente irá criar uma web part e dentro dela criará um user control. Mas só pelo user control ser instanciado automaticamente, não significa que as propriedades customizadas da web part serão enviadas para ele, para isso devemos escrever algum código.

As tarefas que devem ser feitas são as seguintes:

  1. Criar a propriedade no user control: A listagem 01 mostra o código fonte do user control, nele está declarada a propriedade “NomeLista”, no exemplo está sendo apenas declarada, mas poderia ser utilizada em qualquer evento ou método;
  2. Criar a propriedade na web part: A listagem 02 mostra o código fonte da web part. Ela tem que ser criada a nível de web part para poder exibir no SharePoint ao ser editada. Ela só será utilizada, no exemplo, para passar o valor para o user control, que é quem teria a regra de negócio;
  3. Passar o valor da propriedade da web part para a propriedade do user control: na listagem 02 tem o evento CreateChildControls que é onde o user control é instanciado e adicionado à coleção de controles da web part. Entre esse código padrão, foi adicionada a conversão de user control para o tipo do nosso user control. Com isso a variável controle passar a ter a propriedade NomeLista, aí é só passar o valor da web parta para o user control.

namespace TrabalhandoComPropriedades.PropriedadesWebPart
{
    public partial class PropriedadesWebPartUserControl : UserControl
    {
        public string NomeLista { get; set; }

        protected void Page_Load(object sender, EventArgs e)
        {     
        }
    }
}

Listagem 01: User Control

namespace TrabalhandoComPropriedades.PropriedadesWebPart
{
    [ToolboxItemAttribute(false)]
    public class PropriedadesWebPart : WebPart
    {
        // Visual Studio might automatically update this path when you change the Visual Web Part project item.
        private const string _ascxPath = @”~/_CONTROLTEMPLATES/TrabalhandoComPropriedades/PropriedadesWebPart/PropriedadesWebPartUserControl.ascx”;

        // Esta é a propriedade que será exibida na web quando a web part estiver em edição,
        // esses atributos são obrigatórios para que a propriedade seja exibida corretamente
        [Category(“Configurações”),
        Personalizable(PersonalizationScope.Shared),
        WebBrowsable(true),
        WebDisplayName(“Nome da Lista”),
        WebDescription(“Nome da lista que contém os dados”)]
        public string NomeLista { get; set; }

        protected override void CreateChildControls()
        {
            Control control = Page.LoadControl(_ascxPath);
            // Realiza a conversão de tipo de Control para PropriedadesWebPartUserControl para
            // podermos acessar e passar valor para a propriedade do User Control
            PropriedadesWebPartUserControl userControl = (PropriedadesWebPartUserControl)control;
            userControl.NomeLista = this.NomeLista;

            Controls.Add(control);
        }
    }
}

Listagem 02: Web part

Anúncios