Revista MSDN Magazine Edição 13 - GRIDVIEW - Chega pra lá DataGrid, há um novo Grid no pedaço!
Saiba como o controle GridView, sucessor do DataGrid, o amplia de diversas maneiras.
Chega pra lá DataGrid, há um novo Grid no pedaço!
· O que há nestas novas versões
· Construindo uma aplicação Windows Forms
· Ferramentas poderosas e Starter Kits
· Chamando um Web Service
ExpressEditions.exe (578KB)
VB/SQL (principal tecnologia do artigo)
Apesar da riqueza e da versatilidade de sua interface de programação, o controle DataGrid do ASP.NET 1.x exige a criação de muito código personalizado para tratar operações comuns como paginação, classificação, edição e exclusão de dados. Por exemplo, embora o controle DataGrid pode levantar eventos quando o usuário clica para salvar ou cancelar alterações, ele não oferece muito mais do que isso. Se você quiser armazenar as alterações em uma mídia permanente, como um banco de dados, terá que tratar o evento UpdateCommand por conta própria, recuperar os valores alterados, preparar um comando SQL e então partir daí para realizar a atualização.
O motivo pelo qual o controle DataGrid limita o acionamento de eventos para operações comuns com dados é por tratar-se de um controle independente de fontes de dados que pode ser ligado a qualquer objeto de dados que puder ser contado. A implementação de operações com dados como atualização ou exclusão exigiria um link direto com uma fonte de dados específica. No ASP.NET 1.x, você pode contornar essa limitação criando código ADO.NET específico para o seu aplicativo.
O ASP.NET 2.0 amplia a arquitetura de data-binding, introduzindo uma nova família de componentes, os objetos de fonte de dados, que atuam como uma ponte entre os controles de ligação de dados e os objetos do ADO.NET. Esses objetos fonte promovem um modelo de programação ligeiramente diferente e possibilitam novos recursos e membros. Para fins de relatórios de dados, seus aplicativos do ASP.NET 2.0 devem usar o mais novo controle de grid, o GridView. O conhecido controle DataGrid continua sendo suportado, mas não tira proveito dos recursos específicos dos componentes de fontes de dados.
O controle GridView é o sucessor do DataGrid e o amplia de diversas maneiras. Primeiro, suporta totalmente os componentes de fontes de dados e é capaz de tratar automaticamente operações com dados, tais como paginação, classificação e edição, desde que seu objeto de fonte de dados ligado seja compatível com esses recursos. Além disso, o controle GridView oferece algumas melhorias funcionais sobre o DataGrid. Particularmente, suporta campos múltiplos de chaves primárias e apresenta algumas melhorias na interface de usuário e um novo modelo para tratar e cancelar eventos.
O GridView vem com dois controles complementares de exibição: DetailsView e FormView. Combinando esses controles, podem-se definir facilmente exibições globais/detalhadas usando bem pouco código e, em alguns casos, nenhum código.
No ASP.NET 2.0, a hierarquia de classe dos controles de ligação de dados é mais consistente do que no ASP.NET 1.x. Na versão 2.0, todos os controles derivam da mesma classe básica (a classe BaseDataBoundControl), independente da implementação ou das características da interface do usuário. A Figura 1 mostra o diagrama da nova classe. O DataGrid e outros controles da versão 1.x, como o Repeater e o DataList, não estão incluídos no diagrama. A árvore de herança desses controles é a mesma do ASP.NET 1.x. Particularmente, o Repeater herda o WebControl, enquanto o DataList e o DataGrid herdam o BaseDataList. Como mostra a Figura 1, o GridView é um controle de ligação de dados composto e compartilha um conjunto comum de métodos e propriedades com todos os outros controles de ligação de dados, inclusive DropDownList, DetailsView e ListBox.
Figura 1 Diagrama de classes do ASP.NET
Embora parecidos no funcionamento de nível mais alto, os controles GridView e DataGrid têm fundações diferentes. Para permitir a fácil migração das páginas existentes, o GridView preserva o máximo possível o modelo de objeto do DataGrid. Contudo, você não deve esperar cem por cento de compatibilidade entre códigos baseados no DataGrid e baseados no GridView.
Outra diferença básica entre os controles DataGrid e GridView está na interface de usuário adaptável. Ao contrário do DataGrid da versão 1.x, o GridView pode ser exibido também em dispositivos móveis. Em outras palavras, para construir relatórios em dispositivos móveis, você pode usar o mesmo controle de grade que usa nas páginas para desktops. O DataGrid na versão 2.0 também pode exibir de maneira adaptável, mas seus recursos de IU não são tão ricos como os do GridView.
No ASP.NET 2.0, o controle DataGrid foi ampliado para suportar recursos comuns de controle, como temas e personalização. Além disso, o novo controle DataGrid pode ser preenchido por um controle de fonte de dados. Lembre-se, no entanto, que um DataGrid somente pode ser ligado a um objeto de fonte de dados com o objetivo de ler dados. Para alterar a fonte de dados base, ainda é preciso criar algum código definido pelo usuário. Por outro lado, o GridView tira proveito dos recursos da fonte de dados base e exclui ou atualiza os registros automaticamente. Note que o controle GridView também suporta o mecanismo clássico de ligação baseado na propriedade DataSource e no método DataBind. Embora seja totalmente suportada, essa prática de programação é desencorajada.
Os controles GridView e Data Source
Então, o que é um controle de fonte de dados? Um controle de fonte de dados é um conjunto de classes do Microsoft®.NET Framework que facilita a ligação em duas vias entre armazenamentos de dados e controles data-bound. Os controles existentes, como o DataGrid e os novos controles data-bound, como o GridView, podem ser ligados a uma fonte de dados, embora com recursos diferentes.
Um controle de fonte de dados representa as funções chave de uma fonte de dados: selecionar, inserir, atualizar e excluir. Os controles de fonte de dados podem representar qualquer fonte de dados, de bancos de dados relacionais até arquivos XML, de fluxos a objetos comerciais. Se esta breve descrição fizer lembrar dos provedores gerenciados do .NET, analise a Figura 2.
Figura 2 Controles de fonte de dados, GridView e fontes de dados
Os controles de fonte de dados podem ficar sobre alguns provedores de dados do .NET e formar uma camada intermediária entre controles data-bound e fontes de dados. Os controles de fonte de dados também expõem uma interface comum para operações básicas. Alguns desses controles data-bound, especialmente o controle GridView, se ligam a esses comandos para automatizar a edição no local junto a outras operações relacionadas a dados.
Um controle de fonte de dados usa suas propriedades e métodos para expor o conteúdo ligado como um conjunto de exibições nomeadas. A interface IDataSource que todos os controles de fonte de dados implementam, oferece o conjunto básico de recursos para recuperar exibições de dados de uma fonte de dados. O ASP.NET 2.0 oferece muitos controles internos de fonte de dados, conforme relacionado na Tabela 1. Os controles de fonte de dados mostrados na Tabela 1 pertencem a duas categorias: componentes tabulares e hierárquicos. Os componentes SiteMapDataSource e XmlDataSource são controles hierárquicos de fonte de dados e podem ser usados por componentes hierárquicos como o TreeView e o controle Menu. Os vários outros componentes gerenciam dados tabulares.
Tabela 1 Controles de fonte de dados do ASP.NET 2.0
Controles tabulares
Representa uma conexão com um banco de dados do Access. Herda do controle SqlDataSource mas ignora as propriedades ConnectionString e ProviderName para favorecer uma propriedade DataFile mais simples que apontará para o arquivo MDB. O controle usa o provedor de DB OLE Jet 4.0 para conectar ao banco de dados. Se for necessário para o arquivo MDB, você poderá especificar um nome de usuário e uma senha. Uma propriedade ShareMode permite que você especifique se o arquivo MDB é read-only ou read/write.
Trabalha com a representação XML de um objeto DataSet. Os dados XML podem ser especificados como uma string ou por meio de um nome de arquivo. Não é possível ligar esse controle a um objeto DataSet, nem mesmo de forma programática. A classe apresenta métodos para recuperar o objeto DataSet correspondente e definir as informações de esquema. Embora seja baseado em XML, o controle suporta somente a interface tabular e somente pode ser ligado a controles de listas. Usado principalmente para apresentar dados XML em cenários read-only, o controle também suporta a edição de dados XML de base.
Permite a ligação a um objeto .NET comercial que retorne dados. A classe é especificada por nome por meio da propriedade TypeName. O controle permite que os desenvolvedores estruturem os aplicativos usando uma arquitetura de três vias e ainda tirem proveito do modelo de data-binding com declarações do ASP.NET 2.0. A classe deve seguir um padrão de projeto específico e conter, por exemplo, um construtor sem parâmetros e métodos com comportamentos bem conhecidos.
Representa uma conexão com um provedor de dados ADO.NET que retorna dados SQL, incluindo fontes de dados acessíveis por meio de OLE DB e ODBC. O nome do provedor e da string de conexão são definidos por meio de propriedades. Não use essa classe para conectar a um banco de dados Access.