Escolar Documentos
Profissional Documentos
Cultura Documentos
No artigo anterior preparamos o ambiente de desenvolvimento instalando softwares, criando banco de dados e gerando os arquivos Cs e Hbml.xml...
Figura 1 Formulrio de Cadastro de Empresa Acredito que todos os componentes e controles so conhecidos sendo que o que merece uma observao o BSEmpresa (BindingSource) que veremos logo em seguida. Esta tela possui um TabControl que contm em uma pgina um PictureBox para informao da imagem do Logotipo e na outra um DataGridView para visualizao de todos os registros da tabela. Para este form teremos tambm algumas variveis que podem ser visualizadas na Listagem 1. C o n f i g u r a t i o nc f g ; I S e s s i o n F a c t o r yf a c t o r y ; I S e s s i o ns e s s i o n ; I T r a n s a c t i o nt r a n s a c t i o n ;
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=6942 1/5
10/02/13
E m p r e s ae m p r e s a ; Listagem 1 Variveis do Formulrio A varivel cfg ser responsvel por carregar todos os arquivos hbml.xml que esto no resource do projeto. J a varivel factory ser responsvel por carregar as informaes que definimos no App.Config como a string de conexo, qual tipo do Banco de Dados e outras informaes que estejam presentes neste arquivo. Atravs desta varivel ser gerada uma sesso que ser armazenada pela varivel session e que por sua vez ir gerar uma transao sendo armazenada na varivel transaction. Todo este procedimento que foi descrito sobre as responsabilidades de cada varivel iremos coloclo no evento Load do nosso formulrio como mostra a Listagem 2. c f g=n e wC o n f i g u r a t i o n ( ) ; c f g . A d d A s s e m b l y ( t h i s . G e t T y p e ( ) . A s s e m b l y ) ; f a c t o r y=c f g . B u i l d S e s s i o n F a c t o r y ( ) ; s e s s i o n=f a c t o r y . O p e n S e s s i o n ( ) ; t r a n s a c t i o n=s e s s i o n . B e g i n T r a n s a c t i o n ( ) ; / / R e c u p e r a n d ou m aL i s t ad eR e g i s t r o s R e f r e s h D a t a ( ) ; d a t a G r i d V i e w 1 . D a t a S o u r c e=B S E m p r e s a ; d a t a G r i d V i e w 1 . C o l u m n s [ " C o d e m p " ] . H e a d e r T e x t=" C d i g o " ; d a t a G r i d V i e w 1 . C o l u m n s [ " C o d e m p " ] . D i s p l a y I n d e x=0 ; d a t a G r i d V i e w 1 . C o l u m n s [ " R a z S o c " ] . H e a d e r T e x t=" R a z oS o c i a l " ; d a t a G r i d V i e w 1 . C o l u m n s [ " R a z S o c " ] . D i s p l a y I n d e x=1 ; d a t a G r i d V i e w 1 . C o l u m n s [ " R a z S o c " ] . A u t o S i z e M o d e=D a t a G r i d V i e w A u t o S i z e C o l u m n M o d e . F i l l ; d a t a G r i d V i e w 1 . C o l u m n s [ " N o m e f a n " ] . H e a d e r T e x t=" N o m eF a n t a s i a " ; d a t a G r i d V i e w 1 . C o l u m n s [ " N o m e f a n " ] . D i s p l a y I n d e x=2 ; d a t a G r i d V i e w 1 . C o l u m n s [ " N o m e f a n " ] . A u t o S i z e M o d e=D a t a G r i d V i e w A u t o S i z e C o l u m n M o d e . F i l l ; d a t a G r i d V i e w 1 . C o l u m n s [ " E n d e r e c o " ] . H e a d e r T e x t=" E n d e r e o " ; d a t a G r i d V i e w 1 . C o l u m n s [ " E n d e r e c o " ] . D i s p l a y I n d e x=3 ; d a t a G r i d V i e w 1 . C o l u m n s [ " E n d e r e c o " ] . A u t o S i z e M o d e= D a t a G r i d V i e w A u t o S i z e C o l u m n M o d e . F i l l ; d a t a G r i d V i e w 1 . C o l u m n s [ " I s C h a n g e d " ] . V i s i b l e=f a l s e ; d a t a G r i d V i e w 1 . C o l u m n s [ " I s D e l e t e d " ] . V i s i b l e=f a l s e ; t x t c o d i g o . D a t a B i n d i n g s . A d d ( " t e x t " ,B S E m p r e s a ," c o d e m p " ) ; t x t r a z a o . D a t a B i n d i n g s . A d d ( " t e x t " ,B S E m p r e s a ," r a z s o c " ) ; t x t e n d e r e c o . D a t a B i n d i n g s . A d d ( " t e x t " ,B S E m p r e s a ," e n d e r e c o " ) ; t x t n o m e f a n . D a t a B i n d i n g s . A d d ( " t e x t " ,B S E m p r e s a ," n o m e f a n " ) ; p i c l o g o . D a t a B i n d i n g s . A d d ( " I m a g e " ,B S E m p r e s a ," l o g o t i p o " , t r u e ) ; Listagem 2 Inicializando variveis e configurando controles Alm de iniciarmos as variveis para a persistncia de dados tambm configuramos os controles. O mtodo RefreshData utilizado neste evento responsvel por carregar todos os registros da tabela Empresa, como mostrado na Listagem 3.
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=6942
2/5
10/02/13
v o i dR e f r e s h D a t a ( ) { / / R e c u p e r a n d ou m aL i s t ad eR e g i s t r o s s e s s i o n=f a c t o r y . O p e n S e s s i o n ( ) ; I C r i t e r i ac r i t e r i a=s e s s i o n . C r e a t e C r i t e r i a ( t y p e o f ( E m p r e s a ) ) ; I L i s tu s e r L i s t=c r i t e r i a . L i s t ( ) ; B S E m p r e s a . D a t a S o u r c e=u s e r L i s t ; i f( u s e r L i s t . C o u n t= =0 ) B S E m p r e s a . D a t a S o u r c e=n e wE m p r e s a ( ) ; } Listagem 3 Mtodo RefreshData No mtodo RefreshData podemos observar que a propriedade DataSource do BindingSource recebe como resultado o IList de todos os dados recuperados que uma coleo do tipo Empresa. A diferena de se utilizar o BindingSource que ns podemos ligar os controles de tela com as propriedades da classe automaticamente, ficando assim mais fcil recuperar os valores do Banco de dados e mostr-los na tela ou recuperar os valores da tela para gravar o Banco de Dados. Sem o BindingSource teramos que criar um objeto do tipo Empresa, recuperar os valores da tela e coloc-los nos campos respectivos do objeto para realizar a gravao. Com o BindingSource esta parte automtica. Para a gravao dos dados o cdigo bem simples como pode ser visto na Listagem 4. i f( M e s s a g e B o x . S h o w ( " D e s e j ag r a v a ro sd a d o sn oB a n c od eD a d o s ? " , " A t e n o ! " ,M e s s a g e B o x B u t t o n s . Y e s N o ,M e s s a g e B o x I c o n . Q u e s t i o n )= =D i a l o g R e s u l t . N o ) r e t u r n ; B S E m p r e s a . E n d E d i t ( ) ; e m p r e s a=( E m p r e s a ) B S E m p r e s a . C u r r e n t ; f a c t o r y=c f g . B u i l d S e s s i o n F a c t o r y ( ) ; s e s s i o n=f a c t o r y . O p e n S e s s i o n ( ) ; t r a n s a c t i o n=s e s s i o n . B e g i n T r a n s a c t i o n ( ) ; t r y { i f( e m p r e s a . C o d e m p>0 ) s e s s i o n . U p d a t e ( e m p r e s a ) ; e l s e s e s s i o n . S a v e ( e m p r e s a ) ; t r a n s a c t i o n . C o m m i t ( ) ; R e f r e s D a t a ( ) ; } C a t c h { M e s s a g e B o x . S h o w ( " E r r oa oa t u a l i z a roB a n c od ed a d o s ! " ," E r r o ! " , M e s s a g e B o x B u t t o n s . O K ,M e s s a g e B o x I c o n . E r r o r ) ; t r a n s a c t i o n . R o l l b a c k ( ) ; } f i n a l l y { s e s s i o n . C l o s e ( ) ; } Listagem 4 Cdigo para a gravao dos dados
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=6942 3/5
10/02/13
Resumindo este cdigo podemos dizer que recuperamos no BindingSource o registro corrente, que na verdade um objeto do tipo Empresa e setamos na nossa varivel do tipo empresa. Abrimos uma sesso e iniciamos uma transao para a gravao do registro. Aps este ponto temos que verificar se estamos alterando ou adicionando um novo registro, utilizei a propriedade CodEmp devido a mesma ser um campo auto-incremento pois s ter seu valor atualizado quando o registro for salvo no Banco de Dados, sendo assim foi possvel determinar quando executar o mtodo Save ou o mtodo Update. Para o cdigo de excluso de dados a nica coisa que ser alterada o mtodo Delete da varivel session como pode ser visto na Listagem 5. i f( M e s s a g e B o x . S h o w ( " D e s e j ae x c l u i re s t er e g i s t r od oB a n c od eD a d o s ? " , " A t e n o ! " ,M e s s a g e B o x B u t t o n s . Y e s N o ,M e s s a g e B o x I c o n . Q u e s t i o n )= =D i a l o g R e s u l t . N o ) r e t u r n ; B S E m p r e s a . E n d E d i t ( ) ; e m p r e s a=( E m p r e s a ) B S E m p r e s a . C u r r e n t ; f a c t o r y=c f g . B u i l d S e s s i o n F a c t o r y ( ) ; s e s s i o n=f a c t o r y . O p e n S e s s i o n ( ) ; t r a n s a c t i o n=s e s s i o n . B e g i n T r a n s a c t i o n ( ) ; t r y { s e s s i o n . D e l e t e ( e m p r e s a ) ; t r a n s a c t i o n . C o m m i t ( ) ; R e f r e s D a t a ( ) ; } c a t c h { M e s s a g e B o x . S h o w ( " E r r oa oa t u a l i z a roB a n c od ed a d o s ! " ," E r r o ! " , M e s s a g e B o x B u t t o n s . O K ,M e s s a g e B o x I c o n . E r r o r ) ; t r a n s a c t i o n . R o l l b a c k ( ) ; } f i n a l l y { s e s s i o n . C l o s e ( ) ; } Listagem 5 Cdigo de excluso de Dados Como vocs podem reparar no utilizamos nenhum comando SQL, nem para recuperar os dados nem para grav-los ou exclu-los. Esta uma das grandes vantagens de se utilizar a persistncia de dados. H muito para ser explorado neste framework como a execuo de comandos SQL, trabalhar com tabelas que possuem relacionamento dentre outras. Espero ter ajudado vocs a conhecerem um pouco mais sobre este framework e at o prximo artigo.
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=6942
4/5
10/02/13
www.devmedia.com.br/articles/viewcomp.asp?comp=6942
www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=6942
5/5