Buscar

Programando ASP NET 3 5 - Acesso a dados e recursos Avançados - Módulo 04



Continue navegando


Prévia do material em texto

Curso Programando ASP.NET 
3.5: Acesso a dados e 
recursos Avançados 
 
 
 
 
 
MÓDULO IV 
 
 
 
 
Atenção: O material deste módulo está disponível apenas como parâmetro de estudos para 
este Programa de Educação Continuada. É proibida qualquer forma de comercialização do 
mesmo. Os créditos do conteúdo aqui contido são dados aos seus respectivos autores 
descritos na Bibliografia Consultada. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
181 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
MÓDULO IV 
 
Relacionando Controles 
 
O VS permite que criemos ainda controles que tenham dependências e 
relacionamentos entre si. Por exemplo, podemos listar em um DropDownList todos os 
Clientes, no momento em que o usuário faz a escolha de um, os detalhes são 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 são a chave primária, e CompanyName, para exibição 
ao usuário. Na Smart Tag do DropDownList, clique em Choose data source. Defina o item 
Select a data source com SqlDataSource1, o campo de exibição para o usuário como 
CompanyName e o campo para a propriedade value como CustomerID. Observe a 
imagem abaixo: 
 
 
 
 
 
 
182 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
Ainda na Smart Tag do DropDownList habilite a opção 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 formulário. Aponte o mesmo 
novamente para a tabela Customers, porém desta vez adicione diversos campos. 
Observe na imagem abaixo: 
 
 
 
 
 
 
183 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são 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 botão 
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 
botão Add: 
 
 
 
 
Clique em ok e termine de configurar o Wizard. Agora adicione um controle 
GridView ao seu formulário. Na Smat Tag do controle aponte a propriedade Choose Data 
Source para SqlDataSource2. Rode a aplicação, observe que cada vez que o valor do 
DropDownList é alterado, os detalhes do cliente são exibidos no GridView: 
 
 
 
 
 
184 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Outra ideia interessante para você usar no seu dia-a-dia: os Pedidos são exibidos 
em um GridView, sendo uma das colunas um link para os detalhes do pedido. Ao clicar no 
link, a aplicação redireciona para uma nova página onde são exibidos apenas os detalhes 
do pedido clicado. No redirecionamento, o código do pedido será passado através da 
Query String. Para este exemplo, sugiro que crie dois Web Forms: Pedidos.aspx e 
Detalhes.aspx. 
No formulário Pedidos, crie um novo SqlDataSource. Aponte o mesmo para a 
tabela Orders, conforme a imagem a seguir: 
 
 
 
 
 
185 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Não é necessário definir filtros ou opções avançadas. Execute o wizard até sua 
finalização. Adicione um GridView e defina sua propriedade DataSourceID como 
SqlDataSource1, ou se preferir faça o apontamento através da Smart Tag. A seu gosto, 
configure e personalize o GridView. Vamos agora criar o link no GridView que redireciona 
para a página detalhes passando o código 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: 
 
 
 
 
 
 
186 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são 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 usuário 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 vírgula. Para nosso exemplo, informe 
OrderID; 
• DataNavigateUrlFormatString: Define como os parâmetros serão montados na 
URL. Informe ?OrderID={0} . Ou seja, temos um variável denominada OrderID e 
que vai passar o campo de índice zero, como definimos na propriedade 
DataNavigateUrlFields. 
Veja a configuração na imagem abaixo: 
 
 
 
 
 
187 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Execute a aplicação para vermos o resultado parcial. Passe o mouse sobre os 
links e observe que a Url de navegação é diferente para cada linha, pois a query string 
recebe como parâmetro o valor do Campo OrderID; 
 
 
 
 
 
 
188 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
Se você clicar em um Link, será direcionado para a página Detalhes.aspx, porém, 
obviamente, nada vai acontecer. Vamos agora trabalhar na página Detalhes.aspx para 
que os detalhes do pedido sejam exibidos. Adicione um controle SqlDataSource à página 
Detalhes.aspx. Defina a instrução 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 página. Em QueryString field preencha OrderID, que é o nome que demos à 
variável na formação do link na página de Pedidos. Clique em Add. 
 
 
 
 
 
189 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Rode o Wizard até o fim. Adicione um GridView à página e o vincule ao 
SqlDataSouce1. Rode a aplicação, definindo a página Produtos.aspx como inicial. Clique 
nos link e observe que cada link abre apenas os detalhes do pedido em que clicamos: 
 
 
 
 
 
190 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
DetailsView 
 
No exemplo anterior exibimos, em uma página separada, os detalhes de um 
pedido. O detalhe de um pedido pode conter mais de uma linha, normalmente uma linha 
para cada produto. Esta característica exige que sua exibição, 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 
formulário. O formulário exibe o registro no sentido vertical, um abaixo do outro, diferente 
da exibição em forma de tabela do GridView, onde os registros são exibidos 
horizontalmente. A exibição na forma de um formulário permite uma visão mais clara das 
informações, já que cada informação vai ocupar uma linha. A desvantagem é que, 
normalmente, este modo de visualização nos permite ver um único registro. 
 
 
 
 
 
191 
Este materialdeve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
O VS possui dois controles de exibição de dados em forma de formulário: O 
DetailsView, que vamos estudar nesta seção, e o FormView, que iremos estudar na seção 
seguinte. Para exemplificar, vamos criar um novo formulário e exibir em um GridView 
paginado três colunas da tabela Customers: CustomerID, CompanyName e 
ContactName. À esquerda do GridView teremos um botão Selecionar, que, quando 
clicado, vai exibir em um DetailsView todas as informações do registro selecionado. 
Adicione um novo SqlDataSource ao seu formulário. Configure o mesmo para ler 
apenas as colunas CustomerID, CompanyName e ContactName, como na imagem 
abaixo: 
 
 
 
Não é necessária nenhuma outra configuração, execute o Wizard até sua 
finalização. Adicione um GridView ao formulário e defina sua propriedade DataSourceID 
como SqlDataSource1. Através da Smart Tag do controle de um estilo ao mesmo, e 
 
 
 
 
 
192 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
habilite a paginação. Você pode ainda definir uma quantidade menor de linhas por página 
através da propriedade PageSize do controle. Em meu exemplo defini como 5. Para 
adicionar um botão de seleção de coluna, localize a opção Enable Selection na Smart 
Tag: 
 
 
 
Personalize o botão ao seu gosto, lembrando que para isso basta clicar em Edit 
Columns na Smart Tag, encontrar a botão na lista de colunas e alterar suas propriedades 
ao seu gosto. Agora adicione um segundo SqlDataSource à página. Selecione também a 
tabela Customers, porém desta vez ao invés de selecionar alguns campos, defina como 
todos: isto é feito escolhendo o asterisco, como na imagem abaixo: 
 
 
 
 
 
193 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são 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. 
 
 
 
 
 
194 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Agora adicione um DetailsView ao formulário e defina sua propriedade 
DataSourceID como SqlDataSource2. Defina um estilo para o controle através da Smart 
Tag. Neste ponto sua aplicação deve estar pronta. Execute em algum botão selecionar, 
note que são exibidos os detalhes do registro logo abaixo: 
 
 
 
 
 
195 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Você notou que a linha seleciona no GridView tem um estilo diferente? Graças a 
isto podemos saber qual linha está selecionada. Você pode alterar este estilo através da 
propriedade SelectedRowStyle. Você também notou que quando a aplicação foi aberta 
não havia nenhuma linha selecionada, e consequentemente não era exibido nenhum 
detalhe? Isto porque a propriedade SelectedIndex do GridView, que define a linha 
selecionada, por padrão é 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 podíamos personalizar nosso GridView, inclusive alterando os 
nomes das colunas que por padrão vem com o nome da coluna definido no banco de 
 
 
 
 
 
196 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
dados. O mesmo acontece com o DetailsView, cada linha tem como descrição o nome da 
coluna equivalente no banco de dados. Alterar estas informações é também bastante 
fácil. Basta localizar a opção 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 
opção de inserção de registros? Isso porque na verdade estes controles não têm esta 
função nativa. O FormView é outro controle que gerencia os dados na forma de um 
formulário, porém o mesmo possui três modos: ReadOnly, Edit e Insert, que nos permite 
ver, alterar e incluir dados, um registro de cada vez. Mais ainda, através dos templates 
dos modos, podemos personalizar totalmente o comportamento e a aparência do controle. 
Para testá-lo, vamos criar uma tela totalmente funcional, onde usuário poderá ver 
a tabela de Territories, alterar e incluir registros. A tabela Territories foi escolhida por ser 
pequena, são três registros, e possuir uma chave estrangeira para a tabela Region. Mãos 
à obra! Crie um novo Web Form. Adicione um controle SqlDataSource ao formulário. 
Selecione a tabela Territories e apenas as colunas TerritoryID e TerritoryDescription. Não 
é necessária nenhuma outra configuração, avance o Wizard até sua finalização. 
 
 
 
 
 
 
197 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Adicione um Controle GridView ao seu formulário, defina sua propriedade 
DataSourceID como SqlDataSource1. Aplique um estilo ao mesmo através da opção 
AutoFormat. Defina sua propriedade SelectedIndex como zero e habilite paginação, com 
5 linhas por página. Na Smart Tag clique em Edit Columns. Em Selected fields remova o 
campo TerritoryID: vamos deixar o código para ser exibido apenas no Form View, porém, 
como este campo é chave primária, deve pertencer à instrução Sql do SqlDataSource. 
Note que para remover um campo basta clicar no ícone vermelho em forma de X à direta: 
 
 
 
 
 
 
198 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Agora vamos adicionar um botão de seleção. Em Avaliable fields localize 
CommandField, expanda o nó, selecione Select e clique em Add. Personalize o botão a 
seu gosto: 
 
 
 
 
 
199 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Selecione um segundo SqlDataSource ao seu formulário. Aponte também para a 
tabela Territories, porém selecione asterisco para incluir todos os campos na instrução 
Sql: 
 
 
 
 
 
200 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Clique em Where para a criação do Filtro. Em Column localize a coluna 
TerritoryID, defina Operator como igual, Source como Control e Control ID como 
GridView1: 
 
 
 
 
 
201 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Clique em Add e em seguida em Ok. Voltamos ao Wizard de configuração do Sql 
Data Source, desta vez clique em Advanced e marque o primeiro botão de verificação. 
Isto é para que sejam geradas as instruções Sql de inserção, atualização e exclusão, já 
que nosso FormView vai ter esta capacidade. 
 
 
 
 
 
202 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são 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. Através da Smart Tag do controle defina um estilo 
para o mesmo. Neste ponto você já tem uma aplicação funcional. Rode-a para testar: 
você visualiza uma relação de registros e os detalhes do registro selecionado abaixo. No 
Form View existe ainda um botão Edit, para alteraro registro corrente, um botão Delete 
para apagar o registro e um botão New para incluir um novo. Todas as operações devem 
funcionar desde que não seja violada nenhuma regra de integridade do banco de dados. 
 
 
 
 
 
203 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Vamos agora a nossa seção de solução de problemas. Neste último exemplo 
temos 2 problemas a solucionar: precisamos alterar os textos de descrição dos campos e 
botões e o campo RegionID deveria mostrar a descrição da região mas internamente 
trabalhar com o código da mesma, ou seja, RegionID. No FormView, a personalização 
pode ser feita através da edição dos templates do controle. Existem diversos templates 
que podem ser acessados clicando-se com o botão direito sobre o controle, conforme 
imagem abaixo: 
 
 
 
 
 
204 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Ao colocar um controle no mode de edição de template, você pode modificar a 
seu gosto a apresentação e o comportamento. Na imagem abaixo o template Item, que o 
template de exibição padrão do controle, foi personalizado: 
 
 
 
 
 
205 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Agora vamos à resolução do segundo problema, exibir ao usuário o campo 
RegionDescription ao Invés de RegionID. O procedimento é simples, um novo 
SqlDataSource apontando para a tabela Region e a adição de um DropDownList em cada 
um dos três templates, vinculando-o ao controle e ao SqlDataSource. Adicione 
inicialmente o SqlDataSource ao formulário, ele deve ser adicionado a uma área comum 
do formulário e não dentro do template do controle. Execute o assistente de configuração: 
defina-o para exibir os campos da tabela Region. Não 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 Região e adicione um controle 
DropDownList, como na Imagem abaixo: 
 
 
 
 
 
 
206 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
Agora vamos fazer as vinculações necessárias. Clique na Smart Tag do controle 
localize e clique na opção 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: 
 
 
 
 
 
207 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Repita o procedimento para os outros dois templates do Form View: 
EditItemTemplate e InsertItemtemplate. Você não precisa criar novos controles 
SqlDataSource, todos os DropDownList dos templates podem compartilhar o 
SqlDataSouce3. Pronto. Rode a aplicação. Observe que conforme você seleciona 
diferentes territórios, os detalhes são atualizados com a região correta exibida. 
Experimente ainda Atualizar um registro, mudando sua região, ou mesmo inserir um novo 
registro selecionando a região do DropDownList. 
 
GridView Avançado 
 
Falamos em seção anterior que às vezes nossa aplicação de acesso a dados 
necessita de um misto de controles visuais com código: não é possível solucionar todos 
os problemas arrastando controles ou definindo propriedades. Os controles de exibição de 
dados como o GridView possuem uma série de eventos que são disparados no servidor. 
Normalmente a resolução de alguns problemas implica na criação de código em algum 
destes eventos. 
 
 
 
 
 
208 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
Para exemplificar, vamos construir uma aplicação que deva exibir uma imagem ao 
invés 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 não é mais produzido. Vamos construir um GridView que exiba imagens distintas, 
conforme a situação do produto. 
Primeiramente providencie as imagens. Vou utilizar duas imagens simples que 
encontrei em algum diretório 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 não foi descontinuado, ou seja, que ainda está 
disponível, 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: 
 
 
 
 
 
 
209 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
Adicione um controle GridView ao Web Form. Defina sua propriedade 
DataSourceID como SqlDataSource1 e aplique uma autoformatação 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 não 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. 
 
 
 
 
 
 
210 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Se você seguiu os passos corretamente, seu Web Form deve estar semelhante 
ao da imagem abaixo: 
 
 
 
 
 
 
211 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
Agora devemos escrever algum código 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 são vinculados à linha, dê dois cliques 
sobre o indicador do evento para que o VS crie automaticamente um manipulador para o 
evento. Agora é hora do código. Como este evento é disparado em outros elementos do 
GridView além de linhas, como cabeçalho e rodapé, a primeira linha de código certifica-se 
que o evento está sendo executado para um linha de dados, caso contrário, aborta o 
evento. 
A segunda linha declara um tipo CheckBox, repare que na declaração na 
utilizamos a palavra New, isto porque não estamos criando um novo objeto, mas 
atribuindo por referência o CheckBox da coluna Discontinued de nosso GridView. Veja 
que o ASP.NET procura o controle pelo nome na terceira coluna (2) da atual célula do 
GridView. O mesmo é feito em seguida, onde instanciamos uma referência do controle 
Image do GridView. 
Como os controles foram instanciados por referência, significa que na verdade 
ambos ocupam uma mesma posição de memória. Como consequência, qualquer 
alteração feita na variável de instância vai refletir no controle. Isto dá sentido aonosso 
último bloco de código, 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 contrário sai do evento 
If Not e.Row.RowType = DataControlRowType.DataRow Then Exit Sub 
 
'Declara uma variável do tipo chekbok, que recebe por referência 
'o controle CheckBox do GridView 
Dim Check As CheckBox = e.Row.Cells(2).FindControl("Checkbox1") 
 
'Declara uma variável do tipo Image, que recebe por referência 
'o controle Image do GridView 
Dim imagem As Image = e.Row.Cells(3).FindControl("Image1") 
 
'Atribui a imagem de acordo com a situação do chekbox 
If Check.Checked = True Then 
 imagem.ImageUrl = "smallfail.gif" 
 
 
 
 
 
212 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são 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 contrário sai do evento 
if (!(e.Row.RowType == DataControlRowType.DataRow)) return; 
 
//Declara uma variável do tipo chekbok, que recebe por referência 
//o controle CheckBox do GridView 
CheckBox Check = 
(CheckBox)e.Row.Cells[2].FindControl("Checkbox1"); 
 
//Declara uma variável do tipo Image, que recebe por referência 
//o controle Image do GridView 
Image imagem = (Image)e.Row.Cells[3].FindControl("Image1"); 
 
//Atribui a imagem de acordo com a situação 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: 
 
 
 
 
 
213 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
ListView e DataPager 
 
O controle ListView possui algumas características diferenciadas com relação ao 
DataGrid, que estudamos até o momento: possui uma maior quantidade de eventos e 
templates, permite maior controle sobre o código renderizado e possui um item template. 
É o primeiro controle em que podemos ter, de forma nativa, controle total sobre as 
operações no banco de dados, inclusive Inserção, o que até agora só foi possível com o 
uso de dois ou mais controles. 
O Listview também possui a funcionalidade de paginação embutida, porém este 
controle nos trás uma nova opção: tratar a paginação através de um controle à parte. 
Qual é o benefício? Com um controle à parte temos maior flexibilidade sobre a paginação, 
escolhendo de que forma e aonde queremos que ela ocorra. O DataPager foi concebido 
para funcionar com qualquer controle de listagem de dados, porém, ironicamente, no 
momento só funciona com o ListView. O motivo é simples, para usar o DataPager, o 
 
 
 
 
 
214 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são 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 implementação. Os 
demais controles de listagem de dados foram criados antes do DataPager. O GridView 
por exemplo, está disponível desde a versão 2.0 do ASP.NET. 
Se você não pulou o curso diretamente até aqui não vai ter nenhum problema em 
usar o ListView: sua configuração é 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 três colunas. Certifique-se de clicar nas opções 
avançadas e marcar a opção para a criação dos comandos Sql de inserção, exclusão e 
alteração. Não vou detalhar mais esta etapa já que isso foi feito diversas vezes durante o 
curso. 
Agora vamos às configurações. 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 configuração do 
ListView. Em Select a Layout definimos um layout de comportamento do ListView: você 
pode navegar entre as opções e ter uma visualização na janela Preview. Note que as 
opções diferem totalmente de comportamento entre si. Em Select a style você pode 
escolher uma opção de estilo pré-definido para o controle. Finalmente, em Options, 
podemos marcar as opções que no Grid View estavam disponíveis diretamente na Smart 
Tag do controle. Na opção de paginação, podemos escolher se queremos paginação 
numérica ou do tipo Próximo/Anterior. Como vamos utilizar um controle de paginação, o 
DataPager, esta é a única opção que vamos deixar desmarcada: 
 
 
 
 
 
215 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Note que já em tempo de design, a última linha do ListView é reservada para 
inclusão: 
 
 
 
 
 
216 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são 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: 
 
 
 
 
 
 
 
217 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
Agora, na Smart Tag do controle localize a opção Choose Pager Style: existem 
duas opções: Numeric Pager ou Next/Previous Pager. Para meu exemplo escolhi Numerci 
Pager: 
 
 
 
Ainda na Smart Tag, clique na opção Edit Pager Fileds. Temos um editor de 
campos de paginação. Ao selecionar um campo da paginação em Selected Fields, 
podemos personalizá-lo na janela de propriedades à direita. Altere, minimamente, as 
propriedades Text, como NextPageText: 
 
 
 
 
 
 
 
 
218 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
Rode a aplicação. Temos agora uma listagem de dados que é capaz de suportar 
todas as operações: listagem, alteração, exclusão e inclusão, com um modelo de 
paginação totalmente personalizável. 
 
 
 
LINQ 
 
Vou começar este capítulo com uma pequena história. Certa vez um aluno de um 
curso veio até mim, orgulhoso, comentando que em sua empresa haviam construído uma 
aplicação 100% Orientada a Objetos. Tal fato realmente aguçou minha curiosidade, pois 
sei da dificuldade, tecnologicamente falando, que é fazer tal aplicação. Resolvi pedir mais 
detalhes sobre a aplicação, 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 empolgação inicial: FireBird. 
Na verdade, o modelo de aplicação que havia sido criado é o modelo mais 
tradicional de aplicação de hoje em dia: código escrito utilizando o paradigma de 
Orientação a Objetos, porém com um banco de dados relacional. A orientação a objetos 
deixou de ser uma utopia universitária e tornou-se comum na indústria: toda e qualquer 
 
 
 
 
 
219 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
linguagem moderna oferece suporte, mesmo que não da forma purista como alguns 
esperam, a Orientaçãoa Objetos. Já estamos chegando ao ponto, natural em tudo o que 
evolui, em que alguns já não a apontam como o modelo ideal ou o melhor para o 
desenvolvimento de aplicações. Por outro lado, os sistemas gerenciadores de banco de 
dados orientados a objetos, até o momento, não atingiram a mesma popularidade das 
linguagens. Os motivos são muitos: o modelo relacional está tecnologicamente muito mais 
avançado, os bancos de dados orientados a objetos são poucos, caros e tecnicamente 
difíceis; o modelo relacional tem se mostrado mais eficiente para aplicações de 
manipulação de dados, entre outras. 
O fato é que, ainda por um bom tempo, o modelo tradicional de aplicação 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 invés do modelo relacional que realmente existe. Por exemplo, uma inserção na tabela 
Orders poderia ser feito como no hipotético código abaixo: 
Dim Orders as New Orders() 
Orders.Data = Now() 
Orders.Customer = Cliente 
Orders.Insert() 
 
 
O código acima trata a entidade Orders de um banco de dados relacional como 
um objeto, definindo valores através de propriedades e chamando métodos. Algumas 
ferramentas como o LLBLGen Pro e Nhibernate nos permitem trabalhar com um código 
semelhante ao listado acima. A solução Microsoft para impedance mismatch chama-se 
LINQ. Existem três 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 aplicação ou uma nova página ASP.NET. Acesse o menu Project 
comando LINQ to Sql Classes, como na imagem a seguir: 
 
 
 
 
 
220 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são 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 através do menu View, comando Server Explorer. Crie uma 
conexão com o banco de dados Northwind clicando em Connect to Database na parte 
superior do Server Explorer. Após a conexão efetuada, localize a pasta Tables para 
visualizar as tabelas deste banco de dados: 
 
 
 
 
 
221 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Arraste a tabela Customers para a área do Object Relation Designer. Note que 
imediatamente o Desginer cria um mapeamento através de uma classe para a entidade: 
 
 
 
 
 
222 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
Observe que há uma segunda área à direta onde podemos criar métodos, 
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 método para a execução da Procedure: 
 
 
 
 
 
223 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
Vamos agora abrir, em um Web Form, a tabela Customers através do 
mapeamento realizado pelo LINQ: 
 
'Instância 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() 
 
 
//Instância 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 exibição da tabela Customers na página: 
 
 
 
 
 
224 
Este material deve ser utilizado apenas como parâmetro de estudo deste Programa. Os créditos deste conteúdo são dados aos seus respectivos autores
 
 
 
 
 
 
 
 
 
 
---------------FIM DO MÓDULO IV--------------- 
 
 
 
 
 
----------------FIM DO CURSO!----------------