ASP .NET - Preenchendo um DropDownList com LINQ to SQL
A partir da versão 3.5 da plataforma .NET o Visual Studio trouxe integrado o LINQ como uma nova ferramenta para trabalhar com a camada de dados em aplicações que usam a linguagem VB.NET ou C#. Antes do LINQ, geralmente era criado uma camada de acesso a dados com a utilização dos objetos SqlConnection, SqlCommand, DataReader, DataSet, etc para manipular os dados.
Com o advento do LINQ e do LINQ to SQL não precisamos nos preocupar com detalhes relacionados aos objetos SqlConnection, SqlCommand, DataReader, DataSet pois podemos usar os objetos de negócios gerados pelo LINQ e a camada de acesso a dados.
Por ser uma tecnologia recente ainda estamos aprendendo a melhor forma de usar o recurso oferecido pelo LINQ e o LINQ to SQL em nossas aplicações e este artigo tem o objetivo de mostrar como você pode preencher um controle dropdownlist em uma aplicação ASP .NET usando o LINQ to SQL.
Portanto eu vou mostrar 2 formas mais usadas de preencher o controle Dropdownlist em uma web site ASP .NET e para isso vou usar o Visual Web Developer 2008 Express Edition e o SQL Server 2005 Express Edition e o banco de dados Northwind.mdf.
Abra o Visual Web Developer 2008 Express e crie um novo web site no menu File->New Web Site usando o template ASP .NET Web Site e a linguagem Visual Basic com o nome DropDownList_LINQ;
Selecione o projeto e clique com o botão direito do mouse sobre o nome e selecione Add -> New Item;
A seguir selecione o template LINQ to SQL Classes e informe o nome Northwind.dbml pois vamos usar o banco de dados Northwind.mdf;
O arquivo .dbml será copiado para a pasta AppCode e o assistente LINQ será aberto.
A seguir abra a janela DataBase Explorer e selecione a conexão com o banco de dados Northwind.mdf (Se ela não existir você deverá criá-la). Expanda os objetos Table e arraste e solte a tabela Products no descrito LINQ para gerar o mapeamento OR/M e criar a entidade Product e contexto NorthwindDataContext para gerenciar o relacionamento entre a entidade e a tabela usada no exemplo conforme a figura abaixo:
Com isso já temos o ambiente preparado para acessar os dados a partir do LINQ to SQL.
1- Preenchendo um dropdownlist com o LinqDataSource
Usar o controle para preencher o controle dropdownlist é uma das maneiras mais simples.
Selecione e abra a página Default.aspx e inclua uma tabela a partir do menu Table-> Insert Table;
A seguir inclua um controle DropDownList na página e a partir da guia Data arraste e solte um controle LinqDataSource conforme o leiaute abaixo:
Vamos configurar o componente LinqDataSource. Selecione o componente e clique em Configure DataSource;
Na janela do assistente você verá o contexto NorthwindDataContext sendo exibido, clique em Next>;
Na próxima janela selecione a tabela Products e marque os campos que vamos usar: ProductID e ProductName e clique em Finish;
Agora selecione o controle Dropdownlist e defina as seguintes propriedades:
Executando o web site iremos obter:
Esta é a forma mais fácil de fazer a vinculação com o dropdownlist, não usa nenhum código e é fácil de entender e de manter, mas nem sempre o que é o mais fácil é o mais correto e dependendo da arquitetura do seu projeto efetuar a vinculação direta usando o controle LinqDataSource com a fonte de dados viola a hierarquia de uma arquitetura em camadas e não lhe oferece nenhum objeto com o qual você possa trabalhar usando padrões de projeto.
2- Preenchendo um dropdownlist com vinculação a objetos LINQ
Vamos agora mostrar uma outra forma de preencher o dropdownlist usando objetos LINQ através da vinculação direta.
Inclua um novo controle DropDowList na página e defina as seguintes propriedades:
Agora no evento Load da página inclua o código abaixo:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Not IsPostBack Then ' Vinculando diretamente com a entidade LINQ ddl2.DataSource = GetProdutos() ddl2.DataBind() End If End Sub |
Agora defina o método estático GetProdutos conforme abaixo:
Public Shared Function GetProdutos() As List(Of Product) 'Usamos o contexto criado pelo LINQ to SQL Using contexto As New NorthwindDataContext() Return (contexto.Products.ToList()) End Using End Function |
Usando este método tivemos que escrever um pouco de código. O ideal seria ter criado uma camada separada para definir os objetos LINQ através da criação de um novo projeto do tipo Class Library e em seguida referenciar o projeto ao nosso web site.
A função GetProdutos() acessa através do contexto criado pelo LINQ a tabela Products; chamamos o método ToList() para retornar uma coleção de objetos.
Executando o web site teremos o seguinte resultado:
Neste método temos um controle maior sobre como os dados podem ser exibidos pois podemos alterar o método GetProdutos() incluindo algum processamento prévio. Além disso dessa forma podemos trabalhar com uma arquitetura em camadas. O problema é que estamos fazendo a vinculação diretamente com os objetos LINQ e o nosso código não fica tão fácil de ser reusado.
Existe ainda uma outra forma de fazer esta vinculação através da definição de uma interface para os tipos que estamos tratando e da implementação desta interface e da utilização de Reflection mas abordarei este método em outro artigo.
Aguarde mais artigos sobre ADO .NET.
Referências:
José Carlos Macoratti