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