Anda di halaman 1dari 45

Curso Programando ASP.

NET
3.5: Acesso a dados e
recursos Avanados

MDULO IV

Ateno: O material deste mdulo est disponvel apenas como parmetro de estudos para
este Programa de Educao Continuada. proibida qualquer forma de comercializao do
mesmo. Os crditos do contedo aqui contido so dados aos seus respectivos autores
descritos na Bibliografia Consultada.
MDULO IV

Relacionando Controles

O VS permite que criemos ainda controles que tenham dependncias e


relacionamentos entre si. Por exemplo, podemos listar em um DropDownList todos os
Clientes, no momento em que o usurio faz a escolha de um, os detalhes so exibidos em
um GridView. Vamos criar um primeiro exemplo. Para isso adicione um DropDownList e
um SqlDataSource a um novo WebForm. Configure o SqlDataSource para retornar da
tabela os campos CustomerID, que so a chave primria, e CompanyName, para exibio
ao usurio. Na Smart Tag do DropDownList, clique em Choose data source. Defina o item
Select a data source com SqlDataSource1, o campo de exibio para o usurio como
CompanyName e o campo para a propriedade value como CustomerID. Observe a
imagem abaixo:

181
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Ainda na Smart Tag do DropDownList habilite a opo Enable AutoPostBack. Isso
far com que a cada troca de valor no DropDownList um postback seja disparado e o
GridView seja Atualizado.

Adicione um novo controle SqlDataSource ao formulrio. Aponte o mesmo


novamente para a tabela Customers, porm desta vez adicione diversos campos.
Observe na imagem abaixo:

182
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Agora devemos definir o filtro para o DataSource, o que vai fazer com o GridView
exiba os detalhes apenas do registro selecionado no DropDownList. Clique no boto
Where. Em column localize o valor CustomerID, em operator localize o operador igual,
defina source como Control e ControlID como DropDownList1, em seguida clique no
boto Add:

Clique em ok e termine de configurar o Wizard. Agora adicione um controle


GridView ao seu formulrio. Na Smat Tag do controle aponte a propriedade Choose Data
Source para SqlDataSource2. Rode a aplicao, observe que cada vez que o valor do
DropDownList alterado, os detalhes do cliente so exibidos no GridView:

183
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Outra ideia interessante para voc usar no seu dia-a-dia: os Pedidos so exibidos
em um GridView, sendo uma das colunas um link para os detalhes do pedido. Ao clicar no
link, a aplicao redireciona para uma nova pgina onde so exibidos apenas os detalhes
do pedido clicado. No redirecionamento, o cdigo do pedido ser passado atravs da
Query String. Para este exemplo, sugiro que crie dois Web Forms: Pedidos.aspx e
Detalhes.aspx.
No formulrio Pedidos, crie um novo SqlDataSource. Aponte o mesmo para a
tabela Orders, conforme a imagem a seguir:

184
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
No necessrio definir filtros ou opes avanadas. Execute o wizard at sua
finalizao. Adicione um GridView e defina sua propriedade DataSourceID como
SqlDataSource1, ou se preferir faa o apontamento atravs da Smart Tag. A seu gosto,
configure e personalize o GridView. Vamos agora criar o link no GridView que redireciona
para a pgina detalhes passando o cdigo do pedido na query string. Na Smart Tag do
GridView, clique em Edit Columns. Em Avaliable fields, localize HyperLinkField e clique
em Add. Certifique-se deste campo estar posicionado como a ltima coluna em Selected
Fields:

185
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Com o HyperLinkField selecionado, vamos agora configurar algumas
propriedades na rea direita. Inicialmente localize a propriedade Text e defina como
Detalhes, esta propriedade ser exibida para o usurio no Link. Agora localize o grupo de
propriedade Data. Neste grupo devemos configurar duas propriedades:
DataNavigateUrlFields: Especifica as colunas adicionadas a URL. Podemos
adicionar mais de uma, separadas por vrgula. Para nosso exemplo, informe
OrderID;
DataNavigateUrlFormatString: Define como os parmetros sero montados na
URL. Informe ?OrderID={0} . Ou seja, temos um varivel denominada OrderID e
que vai passar o campo de ndice zero, como definimos na propriedade
DataNavigateUrlFields.

Veja a configurao na imagem abaixo:

186
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Execute a aplicao para vermos o resultado parcial. Passe o mouse sobre os
links e observe que a Url de navegao diferente para cada linha, pois a query string
recebe como parmetro o valor do Campo OrderID;

187
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Se voc clicar em um Link, ser direcionado para a pgina Detalhes.aspx, porm,
obviamente, nada vai acontecer. Vamos agora trabalhar na pgina Detalhes.aspx para
que os detalhes do pedido sejam exibidos. Adicione um controle SqlDataSource pgina
Detalhes.aspx. Defina a instruo Sql para recuperar todos os registros da tabela:

Clique em Where. Em Column defina com OrderID, operator localize igual, em


Source defina como QueryString, j que queremos recuperar o valor para o filtro na Query
String da pgina. Em QueryString field preencha OrderID, que o nome que demos
varivel na formao do link na pgina de Pedidos. Clique em Add.

188
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Rode o Wizard at o fim. Adicione um GridView pgina e o vincule ao
SqlDataSouce1. Rode a aplicao, definindo a pgina Produtos.aspx como inicial. Clique
nos link e observe que cada link abre apenas os detalhes do pedido em que clicamos:

189
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
DetailsView

No exemplo anterior exibimos, em uma pgina separada, os detalhes de um


pedido. O detalhe de um pedido pode conter mais de uma linha, normalmente uma linha
para cada produto. Esta caracterstica exige que sua exibio, se queremos ver todos os
registros simultaneamente, seja feita na forma de linhas, por isso um timo caso do uso
do GridView.
Eventualmente, vamos querer ver os detalhes de um registro na forma de
formulrio. O formulrio exibe o registro no sentido vertical, um abaixo do outro, diferente
da exibio em forma de tabela do GridView, onde os registros so exibidos
horizontalmente. A exibio na forma de um formulrio permite uma viso mais clara das
informaes, j que cada informao vai ocupar uma linha. A desvantagem que,
normalmente, este modo de visualizao nos permite ver um nico registro.

190
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
O VS possui dois controles de exibio de dados em forma de formulrio: O
DetailsView, que vamos estudar nesta seo, e o FormView, que iremos estudar na seo
seguinte. Para exemplificar, vamos criar um novo formulrio e exibir em um GridView
paginado trs colunas da tabela Customers: CustomerID, CompanyName e
ContactName. esquerda do GridView teremos um boto Selecionar, que, quando
clicado, vai exibir em um DetailsView todas as informaes do registro selecionado.
Adicione um novo SqlDataSource ao seu formulrio. Configure o mesmo para ler
apenas as colunas CustomerID, CompanyName e ContactName, como na imagem
abaixo:

No necessria nenhuma outra configurao, execute o Wizard at sua


finalizao. Adicione um GridView ao formulrio e defina sua propriedade DataSourceID
como SqlDataSource1. Atravs da Smart Tag do controle de um estilo ao mesmo, e

191
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
habilite a paginao. Voc pode ainda definir uma quantidade menor de linhas por pgina
atravs da propriedade PageSize do controle. Em meu exemplo defini como 5. Para
adicionar um boto de seleo de coluna, localize a opo Enable Selection na Smart
Tag:

Personalize o boto ao seu gosto, lembrando que para isso basta clicar em Edit
Columns na Smart Tag, encontrar a boto na lista de colunas e alterar suas propriedades
ao seu gosto. Agora adicione um segundo SqlDataSource pgina. Selecione tambm a
tabela Customers, porm desta vez ao invs de selecionar alguns campos, defina como
todos: isto feito escolhendo o asterisco, como na imagem abaixo:

192
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Vamos agora definir o filtro. Clique em Where, defina Column como CustomerID,
Operator como igual, Source como Control e ControlID com GridView1. Clique em Add.

193
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Agora adicione um DetailsView ao formulrio e defina sua propriedade
DataSourceID como SqlDataSource2. Defina um estilo para o controle atravs da Smart
Tag. Neste ponto sua aplicao deve estar pronta. Execute em algum boto selecionar,
note que so exibidos os detalhes do registro logo abaixo:

194
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Voc notou que a linha seleciona no GridView tem um estilo diferente? Graas a
isto podemos saber qual linha est selecionada. Voc pode alterar este estilo atravs da
propriedade SelectedRowStyle. Voc tambm notou que quando a aplicao foi aberta
no havia nenhuma linha selecionada, e consequentemente no era exibido nenhum
detalhe? Isto porque a propriedade SelectedIndex do GridView, que define a linha
selecionada, por padro definida como -1. Se voc alterar esta propriedade para zero,
por exemplo, o Web Form abrir com a primeira linha selecionada e os detalhes da linha
j abertos.
Vimos como podamos personalizar nosso GridView, inclusive alterando os
nomes das colunas que por padro vem com o nome da coluna definido no banco de

195
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
dados. O mesmo acontece com o DetailsView, cada linha tem como descrio o nome da
coluna equivalente no banco de dados. Alterar estas informaes tambm bastante
fcil. Basta localizar a opo Edit Fields na Smar Tag do controle e personalizar um a um
dos campos.

FormView

Voc notou que at o momento, em nenhum dos controles que estudamos, havia
opo de insero de registros? Isso porque na verdade estes controles no tm esta
funo nativa. O FormView outro controle que gerencia os dados na forma de um
formulrio, porm o mesmo possui trs modos: ReadOnly, Edit e Insert, que nos permite
ver, alterar e incluir dados, um registro de cada vez. Mais ainda, atravs dos templates
dos modos, podemos personalizar totalmente o comportamento e a aparncia do controle.
Para test-lo, vamos criar uma tela totalmente funcional, onde usurio poder ver
a tabela de Territories, alterar e incluir registros. A tabela Territories foi escolhida por ser
pequena, so trs registros, e possuir uma chave estrangeira para a tabela Region. Mos
obra! Crie um novo Web Form. Adicione um controle SqlDataSource ao formulrio.
Selecione a tabela Territories e apenas as colunas TerritoryID e TerritoryDescription. No
necessria nenhuma outra configurao, avance o Wizard at sua finalizao.

196
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Adicione um Controle GridView ao seu formulrio, defina sua propriedade
DataSourceID como SqlDataSource1. Aplique um estilo ao mesmo atravs da opo
AutoFormat. Defina sua propriedade SelectedIndex como zero e habilite paginao, com
5 linhas por pgina. Na Smart Tag clique em Edit Columns. Em Selected fields remova o
campo TerritoryID: vamos deixar o cdigo para ser exibido apenas no Form View, porm,
como este campo chave primria, deve pertencer instruo Sql do SqlDataSource.
Note que para remover um campo basta clicar no cone vermelho em forma de X direta:

197
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Agora vamos adicionar um boto de seleo. Em Avaliable fields localize
CommandField, expanda o n, selecione Select e clique em Add. Personalize o boto a
seu gosto:

198
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Selecione um segundo SqlDataSource ao seu formulrio. Aponte tambm para a
tabela Territories, porm selecione asterisco para incluir todos os campos na instruo
Sql:

199
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Clique em Where para a criao do Filtro. Em Column localize a coluna
TerritoryID, defina Operator como igual, Source como Control e Control ID como
GridView1:

200
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Clique em Add e em seguida em Ok. Voltamos ao Wizard de configurao do Sql
Data Source, desta vez clique em Advanced e marque o primeiro boto de verificao.
Isto para que sejam geradas as instrues Sql de insero, atualizao e excluso, j
que nosso FormView vai ter esta capacidade.

201
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Clique em Ok e finalize o Wizard.

Hora de adicionar um FormView ao seu Web Form. Defina a propriedade


DataSourceID como SqlDataSource2. Atravs da Smart Tag do controle defina um estilo
para o mesmo. Neste ponto voc j tem uma aplicao funcional. Rode-a para testar:
voc visualiza uma relao de registros e os detalhes do registro selecionado abaixo. No
Form View existe ainda um boto Edit, para alterar o registro corrente, um boto Delete
para apagar o registro e um boto New para incluir um novo. Todas as operaes devem
funcionar desde que no seja violada nenhuma regra de integridade do banco de dados.

202
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Vamos agora a nossa seo de soluo de problemas. Neste ltimo exemplo
temos 2 problemas a solucionar: precisamos alterar os textos de descrio dos campos e
botes e o campo RegionID deveria mostrar a descrio da regio mas internamente
trabalhar com o cdigo da mesma, ou seja, RegionID. No FormView, a personalizao
pode ser feita atravs da edio dos templates do controle. Existem diversos templates
que podem ser acessados clicando-se com o boto direito sobre o controle, conforme
imagem abaixo:

203
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Ao colocar um controle no mode de edio de template, voc pode modificar a
seu gosto a apresentao e o comportamento. Na imagem abaixo o template Item, que o
template de exibio padro do controle, foi personalizado:

204
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Agora vamos resoluo do segundo problema, exibir ao usurio o campo
RegionDescription ao Invs de RegionID. O procedimento simples, um novo
SqlDataSource apontando para a tabela Region e a adio de um DropDownList em cada
um dos trs templates, vinculando-o ao controle e ao SqlDataSource. Adicione
inicialmente o SqlDataSource ao formulrio, ele deve ser adicionado a uma rea comum
do formulrio e no dentro do template do controle. Execute o assistente de configurao:
defina-o para exibir os campos da tabela Region. No vou explicar esta etapa em
detalhes porque este procedimento j foi feito algumas vezes. Abra o ItemTemplate do
Form View, remova o controle Label ao lado do Texto Regio e adicione um controle
DropDownList, como na Imagem abaixo:

205
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Agora vamos fazer as vinculaes necessrias. Clique na Smart Tag do controle
localize e clique na opo Choose data source. Em Select a data souce defina o valor
SqlDataSource3, que a fonte de dados que aponta para a tabela Region. Em Select a
data field for the value of the DropDownList selecione RegionDescrition e em Select a
data field for the value of the DropDownList selecione RegionID:

Clique em Ok. Novamente na Smart Tag do controle, localize Edit DataBindings.


Selecione SelectedValue e em Boud To selecione RegionID:

206
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Repita o procedimento para os outros dois templates do Form View:
EditItemTemplate e InsertItemtemplate. Voc no precisa criar novos controles
SqlDataSource, todos os DropDownList dos templates podem compartilhar o
SqlDataSouce3. Pronto. Rode a aplicao. Observe que conforme voc seleciona
diferentes territrios, os detalhes so atualizados com a regio correta exibida.
Experimente ainda Atualizar um registro, mudando sua regio, ou mesmo inserir um novo
registro selecionando a regio do DropDownList.

GridView Avanado

Falamos em seo anterior que s vezes nossa aplicao de acesso a dados


necessita de um misto de controles visuais com cdigo: no possvel solucionar todos
os problemas arrastando controles ou definindo propriedades. Os controles de exibio de
dados como o GridView possuem uma srie de eventos que so disparados no servidor.
Normalmente a resoluo de alguns problemas implica na criao de cdigo em algum
destes eventos.

207
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Para exemplificar, vamos construir uma aplicao que deva exibir uma imagem ao
invs de um valor booleano. A tabela Products do banco de dados Northwind possui um
campo booleano chamado Discountinued, que est marcada como verdadeiro se o
produto no mais produzido. Vamos construir um GridView que exiba imagens distintas,
conforme a situao do produto.
Primeiramente providencie as imagens. Vou utilizar duas imagens simples que
encontrei em algum diretrio em meu computador. Voc pode fazer o mesmo, ou at
buscar na internet em alguma ferramenta de busca de imagens. Para o exemplo, utilizarei
o cone verde para indicar que o produto no foi descontinuado, ou seja, que ainda est
disponvel, e o vermelho se o produto foi descontinuado (valor True).

Crie um novo Web Form. Inicialmente adicione um controle SqlDataSource, em


que o comando Select recupere as colunas ProductID, ProductName e Discontinued,
conforme no exemplo abaixo:

208
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Adicione um controle GridView ao Web Form. Defina sua propriedade
DataSourceID como SqlDataSource1 e aplique uma autoformatao do controle. Na Smat
Tag do GridView clique em Edit Columns. Em Selected fields selecione o campo
Discontinued, altere sua propriedade Visible para False, isto porque no vamos precisar
ver esta coluna, j que teremos a coluna com a imagem. Em seguida clique em Convert
this field into a TemplateField, que est localizado na forma de um link na parte inferior da
janela.

Agora em Avaliable fields localize ImageField e clique em Add, em seguida clique


novamente em Convert this field into a TemplateField, que est localizado na forma de um
link na parte inferior da janela. Clique em Ok.

209
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Se voc seguiu os passos corretamente, seu Web Form deve estar semelhante
ao da imagem abaixo:

210
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Agora devemos escrever algum cdigo para exibir a imagem na coluna que
adicionamos. Selecione o GridView, na janela de propriedades clique em Events: observe
que existe uma grande quantidade de eventos associados ao controle. Localize o evento
RowDataBoud, que disparado quando os dados so vinculados linha, d dois cliques
sobre o indicador do evento para que o VS crie automaticamente um manipulador para o
evento. Agora hora do cdigo. Como este evento disparado em outros elementos do
GridView alm de linhas, como cabealho e rodap, a primeira linha de cdigo certifica-se
que o evento est sendo executado para um linha de dados, caso contrrio, aborta o
evento.
A segunda linha declara um tipo CheckBox, repare que na declarao na
utilizamos a palavra New, isto porque no estamos criando um novo objeto, mas
atribuindo por referncia o CheckBox da coluna Discontinued de nosso GridView. Veja
que o ASP.NET procura o controle pelo nome na terceira coluna (2) da atual clula do
GridView. O mesmo feito em seguida, onde instanciamos uma referncia do controle
Image do GridView.
Como os controles foram instanciados por referncia, significa que na verdade
ambos ocupam uma mesma posio de memria. Como consequncia, qualquer
alterao feita na varivel de instncia vai refletir no controle. Isto d sentido ao nosso
ltimo bloco de cdigo, onde definimos diferentes imagens para o controle Image de
acordo como valor do CheckBox.
Protected Sub GridView1_RowDataBound(ByVal sender As Object,
ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)
Handles GridView1.RowDataBound
'Verifica se o evento esta sendo executado em uma linha de dados,
'Caso contrrio sai do evento
If Not e.Row.RowType = DataControlRowType.DataRow Then Exit Sub

'Declara uma varivel do tipo chekbok, que recebe por referncia


'o controle CheckBox do GridView
Dim Check As CheckBox = e.Row.Cells(2).FindControl("Checkbox1")

'Declara uma varivel do tipo Image, que recebe por referncia


'o controle Image do GridView
Dim imagem As Image = e.Row.Cells(3).FindControl("Image1")

'Atribui a imagem de acordo com a situao do chekbox


If Check.Checked = True Then
imagem.ImageUrl = "smallfail.gif"

211
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Else
imagem.ImageUrl = "smallsuccess.gif"
End If

End Sub

protected void GridView1_RowDataBound1(object sender,


GridViewRowEventArgs e)
{
//Verifica se o evento esta sendo executado em uma linha de
dados,
//Caso contrrio sai do evento
if (!(e.Row.RowType == DataControlRowType.DataRow)) return;

//Declara uma varivel do tipo chekbok, que recebe por referncia


//o controle CheckBox do GridView
CheckBox Check =
(CheckBox)e.Row.Cells[2].FindControl("Checkbox1");

//Declara uma varivel do tipo Image, que recebe por referncia


//o controle Image do GridView
Image imagem = (Image)e.Row.Cells[3].FindControl("Image1");

//Atribui a imagem de acordo com a situao do chekbox


if (Check.Checked == true)
{
imagem.ImageUrl = "smallfail.gif";
}
else
{
imagem.ImageUrl = "smallsuccess.gif";
}
}

Se tudo foi feito corretamente, seu GridView deve parecer com o da imagem a
seguir:

212
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
ListView e DataPager

O controle ListView possui algumas caractersticas diferenciadas com relao ao


DataGrid, que estudamos at o momento: possui uma maior quantidade de eventos e
templates, permite maior controle sobre o cdigo renderizado e possui um item template.
o primeiro controle em que podemos ter, de forma nativa, controle total sobre as
operaes no banco de dados, inclusive Insero, o que at agora s foi possvel com o
uso de dois ou mais controles.
O Listview tambm possui a funcionalidade de paginao embutida, porm este
controle nos trs uma nova opo: tratar a paginao atravs de um controle parte.
Qual o benefcio? Com um controle parte temos maior flexibilidade sobre a paginao,
escolhendo de que forma e aonde queremos que ela ocorra. O DataPager foi concebido
para funcionar com qualquer controle de listagem de dados, porm, ironicamente, no
momento s funciona com o ListView. O motivo simples, para usar o DataPager, o

213
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
controle deve implementar a interface IpageableItemContainer. Como o ListView foi o
ltimo controle a ser desenvolvido para o ASP.NET, ele j trouxe esta implementao. Os
demais controles de listagem de dados foram criados antes do DataPager. O GridView
por exemplo, est disponvel desde a verso 2.0 do ASP.NET.
Se voc no pulou o curso diretamente at aqui no vai ter nenhum problema em
usar o ListView: sua configurao muito semelhante a de um DataGrid. Para nosso
exemplo, adicione um controle SqlDataSource, um ListView e um DataPager a um novo
Web Form. Vamos inicialmente configurar o SqlDataSouce. O mesmo deve apontar para
a tabela Region, incluindo todas as trs colunas. Certifique-se de clicar nas opes
avanadas e marcar a opo para a criao dos comandos Sql de insero, excluso e
alterao. No vou detalhar mais esta etapa j que isso foi feito diversas vezes durante o
curso.
Agora vamos s configuraes. Primeiramente, na Smart tag do controle ou pela
janela de propriedades defina SqlDataSource1 como o Data Source do controle. Ainda na
Smart Tag, clique em Configure data Source: exibida a janela de configurao do
ListView. Em Select a Layout definimos um layout de comportamento do ListView: voc
pode navegar entre as opes e ter uma visualizao na janela Preview. Note que as
opes diferem totalmente de comportamento entre si. Em Select a style voc pode
escolher uma opo de estilo pr-definido para o controle. Finalmente, em Options,
podemos marcar as opes que no Grid View estavam disponveis diretamente na Smart
Tag do controle. Na opo de paginao, podemos escolher se queremos paginao
numrica ou do tipo Prximo/Anterior. Como vamos utilizar um controle de paginao, o
DataPager, esta a nica opo que vamos deixar desmarcada:

214
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Note que j em tempo de design, a ltima linha do ListView reservada para
incluso:

215
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Vamos agora configurar o controle DataPager que j deve estar sobre seu Web
Form. Na janela de propriedades do controle, defina a propriedade PageControlID como
ListView1, e PageSize como 2, pois nossa tabela tem poucos registros:

216
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Agora, na Smart Tag do controle localize a opo Choose Pager Style: existem
duas opes: Numeric Pager ou Next/Previous Pager. Para meu exemplo escolhi Numerci
Pager:

Ainda na Smart Tag, clique na opo Edit Pager Fileds. Temos um editor de
campos de paginao. Ao selecionar um campo da paginao em Selected Fields,
podemos personaliz-lo na janela de propriedades direita. Altere, minimamente, as
propriedades Text, como NextPageText:

217
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Rode a aplicao. Temos agora uma listagem de dados que capaz de suportar
todas as operaes: listagem, alterao, excluso e incluso, com um modelo de
paginao totalmente personalizvel.

LINQ

Vou comear este captulo com uma pequena histria. Certa vez um aluno de um
curso veio at mim, orgulhoso, comentando que em sua empresa haviam construdo uma
aplicao 100% Orientada a Objetos. Tal fato realmente aguou minha curiosidade, pois
sei da dificuldade, tecnologicamente falando, que fazer tal aplicao. Resolvi pedir mais
detalhes sobre a aplicao, e, naturalmente, a primeira pergunta que fiz foi: Qual sistema
gerenciador de banco de dados utilizaram?. A reposta foi um balde de gua fria em
minha empolgao inicial: FireBird.
Na verdade, o modelo de aplicao que havia sido criado o modelo mais
tradicional de aplicao de hoje em dia: cdigo escrito utilizando o paradigma de
Orientao a Objetos, porm com um banco de dados relacional. A orientao a objetos
deixou de ser uma utopia universitria e tornou-se comum na indstria: toda e qualquer

218
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
linguagem moderna oferece suporte, mesmo que no da forma purista como alguns
esperam, a Orientao a Objetos. J estamos chegando ao ponto, natural em tudo o que
evolui, em que alguns j no a apontam como o modelo ideal ou o melhor para o
desenvolvimento de aplicaes. Por outro lado, os sistemas gerenciadores de banco de
dados orientados a objetos, at o momento, no atingiram a mesma popularidade das
linguagens. Os motivos so muitos: o modelo relacional est tecnologicamente muito mais
avanado, os bancos de dados orientados a objetos so poucos, caros e tecnicamente
difceis; o modelo relacional tem se mostrado mais eficiente para aplicaes de
manipulao de dados, entre outras.
O fato que, ainda por um bom tempo, o modelo tradicional de aplicao que
iremos encontrar ser um misto de Orientado a Objeto e Relacional. Tecnicamente
falando isto um problema, pois tratamos nossos dados de uma forma, mas
recuperamos, armazenamos e alteramos de outra. Isto conhecido como impedance
mismatch. Sempre existiram ferramentas de terceiros com o objetivo de minimizar este
problema. O que estas ferramentas fazem abstrair o modelo do banco para o
desenvolvedor, que passa a enxergar no banco de dados um modelo orientado a objetos,
ao invs do modelo relacional que realmente existe. Por exemplo, uma insero na tabela
Orders poderia ser feito como no hipottico cdigo abaixo:
Dim Orders as New Orders()
Orders.Data = Now()
Orders.Customer = Cliente
Orders.Insert()

O cdigo acima trata a entidade Orders de um banco de dados relacional como


um objeto, definindo valores atravs de propriedades e chamando mtodos. Algumas
ferramentas como o LLBLGen Pro e Nhibernate nos permitem trabalhar com um cdigo
semelhante ao listado acima. A soluo Microsoft para impedance mismatch chama-se
LINQ. Existem trs modelos de LINQ: para objetos, para XML e para SQL. Vamos ver
agora como utilizar o LINQ para SQL no ASP.NET 3.5.
Crie uma nova aplicao ou uma nova pgina ASP.NET. Acesse o menu Project
comando LINQ to Sql Classes, como na imagem a seguir:

219
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Clique em Add. aberto o Object Relation Designer. Nele podemos arrastar
entidades (tabelas) para que o mesmo cuide de criar o mapeamento para Objeto. Para
isto abra o Server Explorer atravs do menu View, comando Server Explorer. Crie uma
conexo com o banco de dados Northwind clicando em Connect to Database na parte
superior do Server Explorer. Aps a conexo efetuada, localize a pasta Tables para
visualizar as tabelas deste banco de dados:

220
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Arraste a tabela Customers para a rea do Object Relation Designer. Note que
imediatamente o Desginer cria um mapeamento atravs de uma classe para a entidade:

221
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Observe que h uma segunda rea direta onde podemos criar mtodos,
bastando para isso arrastar objetos para a rea. Voc pode, por exemplo, localizar uma
Stored Procedure do banco de dados Northwind e arrastar para esta rea, imediatamente
ser criado um mtodo para a execuo da Procedure:

222
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
Vamos agora abrir, em um Web Form, a tabela Customers atravs do
mapeamento realizado pelo LINQ:
'Instncia um contexto com o mapemento
Dim NorthWind As New DataClasses1DataContext
'Cria uma consulta
Dim consulta = From n In NorthWind.Customers Select n
'Liga ao GridView
GridView1.DataSource = consulta
GridView1.DataBind()

//Instncia um contexto com o mapemento


DataClasses1DataContext NorthWind = new
DataClasses1DataContext();
//Cria uma consulta
var consulta = ;
//Liga ao GridView
GridView1.DataSource = consulta;
GridView1.DataBind();

O resultado a exibio da tabela Customers na pgina:

223
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores
---------------FIM DO MDULO IV---------------

----------------FIM DO CURSO!----------------

224
Este material deve ser utilizado apenas como parmetro de estudo deste Programa. Os crditos deste contedo so dados aos seus respectivos autores

Anda mungkin juga menyukai