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!----------------