ASP.NET 2.0 - Usando o controle FormView


O controle FormView faz parte dos novos controles da versão 2.0 da ASP.NET e pode ser encontrado na guia Data da ToolBox juntamente com os também novos controles : DetailsView , GridView.

Ele pode ser usado para exibir um único registro de uma fonte de dados da mesma forma que o controle DetailsView e possui recursos para exibição e edição dos valores vinculados bem como recursos de formatação.

A diferença entre o FormView e o DetailsView é que este último usa um leiaute tabular onde cada campo do registro é exibido como uma linha e o FormView não define um leiaute para exibir o registro. No FormView você cria um modelo composto de controles para exibir os campos individuais a partir do registro.

O controle FormView é usado para atualizar e incluir novos registros e geralmente é usado em combinação com um controle GridView para cenários mestre/detalhe.

Veja também o artigo : ASP.NET  2.0 - Incluindo dados com DetailsView  e  ASP.NET - Usando o DetailsView (VÍDEO AULA liberada)

As opções que o controle possui para vincular dados são:

  1. A vinculação de dados usando a propriedade DataSourceID, que permite que você vincule o controle FormView a um controle de fonte de dados. Essa é a abordagem recomendada porque ela permite que o controle FormView aproveite os recursos do controle de fonte de dados e fornece a funcionalidade interna de atualização e paginação.
  2. A vinculação de dados usando a propriedade DataSource, permite que você vincule vários objetos, inclusive leitores de dados e datasets do ADO.NET. Essa abordagem requer que se escreva o código para qualquer funcionalidade adicional como a atualização e paginação.

As propriedades do formato geral de exibição para o controle FormView é dado a seguir:

<asp:FormView id="id" Runat="Server"
AllowPaging="True|False"
Caption="string"
CaptionAlign="Top|Bottom|Left|Right|NotSet"
CellPadding="n"
CellSpacing="n"
DataSourceID="id"
FooterText="string"
GridLines="Both|Horizontal|Vertical|None"
HeaderText="string"

HeaderStyle-property="value"...
RowStyle-property="value"...
FooterStyle-property="value"...
property="value"...

PagerSettings-property="value"...
PagerStyle-property="value"...
>

<HeaderTemplate>
XHTML, text and server controls
</HeaderTemplate>

<ItemTemplate>
XHTML, text and server controls
</ItemTemplate>

<FooterTemplate>
XHTML, text and server controls
</FooterTemplate>

</asp:FormView>

Usando o controle FormView na prática

O controle fornece modelos de forma a permitir que você edite os dados sem precisar programar, assim, você pode definir um modelo no controle conforme o modo de processamento que deseja usar:

Nota: Usando os modelos EditItemTemplate e InsertItemTemplate você inclui controles que levam a entrada do usuário, tais como os controle TextBox, CheckBox, ou DropDownList. Você também pode adicionar controles para exibir dados somente para leitura, e botões de comando para permitir que usuários editarem o registro atual, insiram um novo registro, ou cancelem a ação atual. Você vincula os controles nos modelos EditItemTemplate e InsertItemTemplate a dados utilizando uma expressão de ligação de dados que inclui o método Bind para ligação bidirecional de dados.

Vamos mostrar como usar o FormView para exibir dados usando o modelo ItemTemplate.

Abra o Visual Web Developer 2005 Express Edition e crie um novo web site na opção File->New Web Site com o nome formView;

Selecione a página Default.aspx na janela Solution Explorer e , no modo Design, inclua , a partir da ToolBox , um controle FormView na página;

A seguir , na guia FormView Tasks, na opção Choose Data Source, selecione <New data source...>

Vamos usar como fonte de dados o banco de dados Northwind.mdb , para isso, na próxima janela , selecione a opção Access DataBase e aceite o nome padrão definido pelo assistente para o ID do data source clicando a seguir no botão OK;

A seguir informe o caminho de localização da base de dados Northwind.mdb do seu computador;

Selecione a seguir a tabela Employees e os seguintes campos da tabela: EmployeeID, LastName, FirstName, BirthDate e City;

Ao final, o modo Design, deverá exibir o controle no modo ReadOnly conforme abaixo:

A seguir exibimos também os dois outros modos permitidos pelo controle:

1- Modo : Edit: Permite exibir e editar os dados;

 
2- Modo - Insert : Permite inserir dados;

A seguir vamos habilitar a paginação pelo controle marcando a opção Enable Paging e em seguida editar os templates clicando na opção Edit Templates de forma a exibir os templates suportados pelo controle e que permitem uma configuração pelo usuário:

 
 

Para mostrar como podemos formatar o controle vamos editar o modo EditItemTemplate e incluir uma tabela com 5 linhas e duas colunas a partir do menu Layout (Insert Table) e a seguir incluir os campos na tabela;

Ao final do processo temos a figura abaixo exibindo o resultado esperado. Para encerrar a edição clique na opção : End Template Editing

Após efetuar uma formatação através da propriedade AutoFormat , se executarmos o projeto neste momento iremos visualizar a seguinte página. Se você tentar efetuar uma alteração ao clicar no botão Update irá obter uma mensagem de erro pois ainda não definimos os controles para editar os dados.

Para habilitar o modo de edição e inclusão devemos incluir os comandos para incluir e editar dados. Fazemos isso clicando na opção Configure Data Source ;

Em seguida clique no botão Advanced... e marque as opções : Generate INSERT, UPDATE and DELETE statements e Use optimistic concurrency conforme abaixo:

Após a conclusão desta etapa será gerado o código para atualizar, inserir e excluir dados conforme exibido no modo Source da página a seguir:

<asp:AccessDataSource ID="AccessDataSource1" runat="server" DataFile="c:\dados\Northwind.mdb"

SelectCommand="SELECT [EmployeeID], [LastName], [FirstName], [BirthDate], [City] FROM [Employees]" ConflictDetection="CompareAllValues" DeleteCommand="DELETE FROM [Employees] WHERE [EmployeeID] = ? AND [LastName] = ? AND [FirstName] = ? AND [BirthDate] = ? AND [City] = ?" InsertCommand="INSERT INTO [Employees] ([EmployeeID], [LastName], [FirstName], [BirthDate], [City]) VALUES (?, ?, ?, ?, ?)"

OldValuesParameterFormatString="original_{0}" UpdateCommand="UPDATE [Employees] SET [LastName] = ?, [FirstName] = ?, [BirthDate] = ?, [City] = ?
WHERE [EmployeeID] = ? AND [LastName] = ? AND [FirstName] = ? AND [BirthDate] = ? AND [City] = ?">
<DeleteParameters>
<asp:Parameter Name="original_EmployeeID" Type="Int32" />
<asp:Parameter Name="original_LastName" Type="String" />
<asp:Parameter Name="original_FirstName" Type="String" />
<asp:Parameter Name="original_BirthDate" Type="DateTime" />
<asp:Parameter Name="original_City" Type="String" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="LastName" Type="String" />
<asp:Parameter Name="FirstName" Type="String" />
<asp:Parameter Name="BirthDate" Type="DateTime" />
<asp:Parameter Name="City" Type="String" />
<asp:Parameter Name="original_EmployeeID" Type="Int32" />
<asp:Parameter Name="original_LastName" Type="String" />
<asp:Parameter Name="original_FirstName" Type="String" />
<asp:Parameter Name="original_BirthDate" Type="DateTime" />
<asp:Parameter Name="original_City" Type="String" />
</UpdateParameters>
<InsertParameters>
<asp:Parameter Name="EmployeeID" Type="Int32" />
<asp:Parameter Name="LastName" Type="String" />
<asp:Parameter Name="FirstName" Type="String" />
<asp:Parameter Name="BirthDate" Type="DateTime" />
<asp:Parameter Name="City" Type="String" />
</InsertParameters>
</asp:AccessDataSource>

Se você desejar efetuar uma formatação específica para algum campo basta editar o template, selecionar o campo e na opção Edit DataBindings definir a formatação na opção format do campo vinculado conforme abaixo:

Podemos também alterar o Texto dos links Update e Cancel , estando no modo de edição do template e em propriedades alterar o texto:

Executando agora a página teremos a data sendo exibida no formato: dd/mm/aaaa o texto dos links para atualizar e cancelar alterados.

Enfim, o controle FormView pode ser uma opção interessante para exibição e edição de dados dependendo da sua necessidade.

Pegue o projeto completo aqui: formview

Eu sei é apenas ASP.NET, mas eu gosto...

Referências:   http://msdn2.microsoft.com/en-US/library/fyf1dk77.aspx