P>
Clique aqui para ler todos os artigos desta edição
Boa Idéia
Reutilização de interfaces com Inherited Forms e Master Pages
Este artigo discute |
Este artigo usa as seguintes tecnologias |
· Herança Visual no Windows Forms; · Master Pages; · DataSet tipado; · EventHandlers. |
Visual Studio 2005, ASP.NET 2.0, ASP.NET Ajax, Windows Forms e C#. |
Sabe aqueles sistemas que possuem dezenas de telas de cadastro? Onde todas as telas possuem características semelhantes? Antes de iniciar o desenvolvimento de sistemas desse tipo é comum criarmos algum artifício para a reutilização das interfaces, como templates.
Isso ajuda a reduzir o tempo de desenvolvimento do sistema e também garante a padronização das telas. Veremos neste artigo o que o .NET oferece para a criação desses “templates”, tanto para aplicações Windows Forms quanto para aplicações Web.
Northwind
Para os exemplos vamos precisar de um banco, assim poderemos conferir nossas telas em um ambiente real. Para não desenvolvermos um novo banco, vamos utilizar o famoso Northwind que a Microsoft disponibiliza para testes. Neste artigo utilizaremos o Northwind
Onde encontrar o Northwind?
A Microsoft disponibiliza o download do Northwind para SQL Server, no endereço:
www.microsoft.com/downloads/details.aspx?FamilyID=06616212-0356-46A0-8DA2-EEBC53A68034&displaylang=en
Nova solução
Como neste artigo veremos exemplos tanto
Na janela que abrir, como mostra a Figura 1, selecione o item Other Project Types>Visual Studio Solutions, marque o template Blank Solution, informe “TelaBase” em Name e clique em OK. Nessa solução, no decorrer do artigo, criaremos os projetos necessários para a implementação dos exemplos.
Figura 1. Criando uma nova solução vazia
DataSets Tipados e TableAdapters
Para quem ainda não conhece, o ADO.NET na versão 2.0, possui um novo recurso chamado TableAdapter. Um TableAdapter é gerado junto com um DataTable quando criamos um DataSet Tipado. Utilizaremos um DataSet Tipado com TableAdapter, pois com esses recursos não precisaremos criar nenhuma rotina de acesso e persistência de dados no banco, o TableAdapter será criado com essas rotinas para nós.
Vamos começar criando um projeto Class Library onde modelaremos o DataSet. Clique com o botão direito sobre a Solution e escolha a opção Add>New Project. No item Visual C#, escolha o template Windows>Class Library e informe “TelaBaseLibrary” em Name. Para finalizar, clique em OK.
Ainda no Solution Explorer clique com o botão direito sobre o projeto que acabamos de criar e escolha a opção Add>New Item. Escolha o template DataSet, informe “Northwind” em Name e clique em Add.
Crie uma nova conexão com o Northwind no Server Explorer. Expanda essa conexão até visualizar as tabelas do banco, e em seguida arraste para o DataSet a tabela Shippers. Veja na Figura 2 como deve ficar seu DataSet.
Figura 2. DataTable Shippers e TableAdapter ShippersTableAdapter
Escolhemos a tabela Shippers por ser uma tabela bem simples e servirá perfeitamente para realizarmos nossos exemplos. Com a criação desse DataSet já temos todas as classes de acesso e persistência de dados que necessitamos. Clique com o botão direito sobre o projeto ClassLibrary e compile-o escolhendo a opção Build.
Herança de formulários
Como sabemos qualquer linguagem Orientada a Objetos permite a herança de classes, mas indo um pouco mais além, o .NET possui uma funcionalidade muito interessante para aplicações feitas para Windows, a chamada Herança de Formulários. Herdar um formulário no .NET não consiste apenas em herdar seus métodos, propriedades etc., nos formulários também temos a herança visual.
Na prática teremos uma visão melhor do que é isso. Vamos começar criando um projeto Windows Application. No Solution Explorer, clique com o botão direito sobre a solução e escolha a opção Add>New Project. No item Visual C#, escolha o template Windows>Windows Application, informe “TelaBaseWindows” em Name e clique em OK.
Veja que o projeto foi criado e temos um formulário chamado Form1.cs. Vamos apenas fechá-lo. Em seguida clique com o botão direito sobre o projeto e escolha a opção Add>Windows Form. Informe “CadastroBase.cs” em Name e clique em Add. Agora temos um formulário criado com um nome da nossa escolha. Vamos desenhar sua interface como mostra a Figura 3.
Figura 3. Interface do formulário CadastroBase.cs
Observe que essa é uma interface bem simples, onde utilizamos apenas controles usados
Podemos dizer que essa é uma interface absolutamente genérica, ou seja, pode ser reaproveitada para qualquer tipo de cadastro onde precisamos disponibilizar funcionalidades como: inclusão, alteração, exclusão e movimentação de registros de uma tabela.
Nesse momento devemos compilar o projeto Windows Application, basta clicar com o botão direito sobre o projeto e escolher a opção Build. Apenas com isso já podemos ver na prática como funciona a herança de formulários.
No Solution Explorer, clique novamente com o botão direito sobre o projeto e escolha a opção Add>New Item. Selecione o item Inherited Form, informe “FormShippers.cs” em Name e clique em Add (Figura 4). Assim que clicamos em Add, uma nova janela é aberta (Figura 5).
Figura 4. Criando um novo Inherited Form
Figura 5. Escolhendo de qual formulário o novo formulário herdará
Nessa janela temos que selecionar de qual formulário herdaremos. Veja que estão aparecendo os dois formulários que temos no projeto, vamos selecionar o CadastroBase e clicar
Modifiers
Agora, tente mudar a propriedade Text do lblTitulo para “Shippers”. Ué, porque todas as propriedades do controle estão desativadas? Na verdade, as propriedades e eventos de todos os controles herdados estão como read-only (somente-leitura). Isso deve-se a uma das regras mais básicas da herança na Orientação a Objetos, os atributos de visibilidade.
Volte ao formulário CadastroBase, clique no lblTitulo e vá até as suas propriedades. Procure pela propriedade Modifiers e veja que ela está como private. O Modifier é a propriedade de um controle que define sua visibilidade em relação aos formulários que herdarão suas características.
Exatamente como funciona em uma classe, quando definimos um método como private, as classes que herdarão, não terão acesso a esse método. No caso dos formulários, você não conseguirá alterar as propriedades de um controle que foi definido como private.
Nota: Na POO, o modificador private indica que um membro só pode ser acessado dentro da própria classe em que foi definido.
Vamos mudar essa propriedade do lblTitulo e de todos os outros controles do formulário para Protected, e em seguida faça um Rebuild no projeto Windows Application. Volte ao formulário FormShippers e veja que agora podemos configurar as propriedades do Label do lblTitulo, e portanto podemos mudar o seu Text para “Shippers”.
Nota: Na POO, o modificador protected indica que um membro só pode ser acessado dentro da própria classe em que foi definido e em classes descendentes.
Agora, para que possamos testar na prática o funcionamento desse formulário, vamos incluir o restante dos controles necessários, como mostra a Figura 6.
Figura 6. Formulário FormShippers.cs já com os controles para exibição dos dados
Add Reference
Veja que apenas foram incluidos três TextBoxes e três Labels. Agora precisamos codificar as ações que o formulário realizará. Para isso, precisamos adicionar uma referência no projeto Windows Application, para que possamos utilizar o DataSet e o TableAdapter que criamos anteriormente.
Clique com o botão direito sobre o TelaBaseWindows e escolha a opção Add Reference. Como mostra a Figura 7, clique na aba Project, selecione o projeto TelaBaseLibrary e clique em Add.
Figura 7. Adicionando referência ao Projeto TelaBaseLibrary
Usando DataSet e TableAdapter
Dê uma olhada na Listagem 1. Aqui temos todo o código necessário para que o formulário exiba e edite os dados da tabela Shippers, usando é claro o DataSet Tipado e o seu respectivo TableAdapter.
Codifique sua classe exatamente assim, lembrando de dar um duplo clique em cada um dos botões antes de codificar seu evento Click.
...