Criando um DataSource Provider - Búfalo Informática
Criando um DataSource Provider
Bem, primeiramente é necessário citar algumas definições para que não haja confusão :
Data Providers : Conjunto de classes que possibilitam o acesso a dados através de um determinado meio de comunicação. Ex. OLEDB, ODBC, SQL, etc.
Data Source Providers : Fornece dados para serem consumidos por componentes visuais. Ex. : DataView, Arraylist, etc.
Então, o que precisei criar foi um Data Source Provider. O objetivo foi possibilitar um gerenciamento simples de domínios: Criar um componente que vá ao banco, busque um domínio (descrição/valor), carregue em um dataset no cache e forneça para outros objetos, controlando a permanência da informação no cache.
Eis que procurei em toda a web e nada. Até sobre como criar um Data Provider consegue-se achar, mas sobre Data Source Providers, nada. O devX tem um artigo sobre a criação de custom controls que aceitem databinding, mas nada sobre a criação do data source.
Até que finalmente, depois de muito vasculhar as classes do framework, encontrei a solução utilizando as interfaces IEnumerable e ITypedList.
Então vamos ver um passo a passo para montar um data source provider. Não irei fornecer conteúdo algum, ou seja, da forma como está não será útil, caberá a você fazer a geração do conteúdo como achar melhor. Vamos lá !
Crie um projeto Class Library. Vamos chama-lo de prjSource.
Elimine a Class1 existente no projeto e adicione um Component que chamaremos de cmpFonteDados
Utilize o Add New Item e adicione um novo dataSet (dsDominio). Crie um Element chamado domínio com os campos Descrição e Valor . Grave e feche o dataSet.
Utilizando o elemento DataSet da aba Data na toolbox, insira no componente uma instância do dataSet recém criado, dsDominio.
No código, Adicione a implementação da interface IEnumerable : Implements IEnumerable
No método que é criado, getEnumerator, precisamos devolver um enumerator para o objeto de dados. Adicione o seguinte código neste método :
Return (DsDominio1.Dominio.DefaultView.GetEnumerator)
Adicione a implementação da interface ITypedList, da seguinte forma :
Implements System.ComponentModel.ITypedList
No método GetListName, que aparecerá, precisaremos devolver o nome da lista, na forma de string. Podemos inventar um nome neste ponto ou podemos apenas estar encapsulando a dataView. Neste exemplo vamos fazer o segundo caso, com o seguinte código :
Return (DirectCast(DsDominio1.Dominio.DefaultView, ITypedList).GetListName(listAccessors))
No método getItemProperties, vamos utilizar uma chamada ao mesmo método da dataView para retornar o resultado, veja como fica :
return(DirectCast(dsdominio1.Dominio.DefaultView,ITypedList).GetItemProperties(listAccessors))
Crie uma nova WebApplication chamada prjWeb
Na Toolbox, aba components, clique com o botão direito e selecione Add/Remove Itens
Selecione o Assembly do projeto prjSource
Adicione o componente cmpFonteDados no projeto Web
Adicione uma dropdownlist no webForm
O teste de funcionamento será verificar as propriedades dataSource, dataTextField e dataValueField da dropDownlist. Estas propriedades oferecerão opções fornecidas pelo componente.
E pra que serve tudo isso ?
Simples ora ! Com isso podemos criar componentes de negócio que forneçam dados para a interface de forma que possamos utilizar o RAD para vincular os componentes de negócio na interface. Enquanto aguardamos para poder usar o ObjectDataSource do Framework 2, esta pode ser uma solução legal !
Nome : Mauro de Amorim E-Mail : mda@frg.com.br
Ola Dennes, no seu artigo Criando um DataSource Provider, não consigo criar o elemento, no botão direito não aparece a opção de criar elemento so aparece as opções TableAdapter, DataTable e Query, parei ai. como criar um elemento como voce sujere no artigo, eu uso o VS2005 e o VS2008, gostei muito dessa solução e gostaria de estar usando nas minhas aplicações, facilita muito pra popular uma dropdowlist, e outros componentes, ficarei grato se puder ajudar a criar esse DataSource Provider.
Fundação Real Grandeza.
2528-6720
Este artigo é muito voltado ao framework 1.1. Apesar de tudo ainda estar lá, como a ITypedList, não faria assim no framework 2.0. Veja em http://www.bufaloinfo.com.br/videosbufaloinfo.asp o vídeo sobre desenvolvimento web em camadas.