quarta-feira, 16 de fevereiro de 2011

C# - Response.Redirect numa nova janela

É impossível do lado do servidor porque um redirecionamento no servidor provoca uma resposta HTTP especial para ser enviado para o cliente. O nativo de execução do browser interpreta o código de resposta especial e envia o utilizador para o destino. Não há nenhum mecanismo embutido ou padrão para especificar uma nova janela do lado do servidor. A única maneira de abrir uma nova janela é para que seja iniciado no lado do cliente, seja através de script ou clicar em um link.


<asp:ImageButton ID="ImageButton65" runat="server" onclick="printtable" OnClientClick="redirect('ola')"  ImageURL="../Imagens/imprimir.png" style="height: 25px"/>


<script type="text/javascript">
       function redirect(a) {


           window.open('report.aspx', '_blank',"Report", "width=190,height=400");
       }
</script>




terça-feira, 15 de fevereiro de 2011

ASP.NET - Relatórios com o ReportViewer


Assumindo que você tenha conseguido fazer o download e ter instalado o ReportViewer vamos a um exemplo prático de como você pode criar um relatório em uma página web para exibir os dados de uma tabela Clientes do banco de dados Clientes.mdf
Nota: Para este exemplo eu vou utilizar o SQL Server 2005 Express , criar um banco de dados Clientes.mdf e uma tabela Clientes com os seguintes campos: Codigo,Nome,Endereco,Foto e Renda conforme mostrado na janelaDataBase Explorer:Para saber como criar um banco de dados, uma tabela e incluir dados no SQL Server 2005 Express leia os artigos:

Vamos então arregaçar as mangas e por a mão na massa...
1- Abra o VWD e crie um novo Web Site com o nome de aspnetRelatorio (ou algo parecido)
2- Selecione a página Default.aspx e no modo Design abra a ToolBox e procura na aba Data pelo componente ReportViewer.(Se você instalou o add-in corretamente ele deverá aparecer neste local).  Selecione o componente e arraste-o e solte na páginaDefault.aspx e você verá o descritor do ReportViewer exibido conforme a figura abaixo:
3- Selecione a opção Design a new Report do descritor
4- Será exibido a janela Design do ReportView exibindo o relatório Report1.rdlc conforme a figura abaixo:
Perceba que a ToolBox apresenta um novo formato com a Aba Report Items exibindo os objetos : Pointer,TextBox,Line,Table,Matrix,Rectangle,List,etc...
Vamos trabalhar com objeto Table arrastando e soltando o mesmo na seção Body do descrito do ReportViewer. Fazendo isto obtemos:
Altere a visualização para a aba WebSite Data Sources e a seguir clique no em Add New Data Source. O assistente de configuração irá surgir , selecione a banco de dados clientes.mdf e clique em Next>
Prossiga até incluir a tabela Clientes e usando o Query Builder construir a  instrução SQL para exibir os dados da tabela Clientes conforme abaixo:
Ao terminar você será levado de volta ao Descrito do relatório e a aba WebSite Data Sources estará exibindo o dataset conforme figura a seguir:
Inclua mais uma coluna no objeto Table inserido no descritor clicando com o botão direito do mouse sobre o objeto e selecionando a opção: Insert Column to the Right
A seguir arraste cada um dos campos do dataset para o descritor conforme a figura abaixo e o relatório estará pronto para exibir os dados da tabela Clientes.
Você pode configurar o relatório alterando a fonte, a cor , etc. Abaixo o relatório que formatei para exibição:
Volte para a página Default.aspx e selecione em Choose Report selecione o relatório que acabamos de criar acima:
Basta executar a o projeto no servidor ASP.NET e você verá o relatório ser exibido conforme figura abaixo:
Note que você tem a opção de exportar o relatório no formato Excel ou PDF.
Como acabei de mostrar que você tem a disposição uma ferramenta poderosa e grátis para gerar relatórios em páginas asp.net; mas nem tudo são flores e eu gostaria de alertá-lo para os seguintes fatos:
1- Se você distribuir sua aplicação em um computador que não tem o VS 2005 instalado, você não pode assumir necessariamente que o controle ReportViewer esta disponível; mesmo depois de ter instalado a .NET Framework 2.0.  Você pode contornar este problema efetuando o download do Report Viewer Redistributable - http://www.microsoft.com/downloads/details.aspx?FamilyID=8a166cac-758d-45c8-b637-dd7726e61367 - Outra alternativa é construir um programa de Setup a partir do Visual Studio (Professional) para distribuir sua aplicação. Assim que for detectado que sua aplicação usa o ReportViewer o mesmo será incluído na distribuição da sua aplicação.
2- O Visual Basic 2005 Express e C# Express não incluem o controle ReportViewer. Isto significa que se você estiver usando o VB 2005 Express ou C# Express para desenvolver uma aplicação você precisa primeiro efetuar o download e a seguir instalar o Report Viewer redistributable na sua máquina de desenvolvimento a fim de compilar junto com o projeto. Você precisa também instalar o Report Viewer Redistributable em toda a máquina de destino na qual você esta instalando a sua aplicação.
3- O VB 2005 Express e o C# 2005 Express não incluem um descritor para você desenhar os relatórios.
Apesar destas controvérsias você não pode reclamar mais que não tem uma ferramenta para gerar relatórios na web em suas páginas ASP.NET.
Pegue o código completo do projeto aqui :  aspnetRelatorio.zip (sem a base de dados)
referências:  http://msdn2.microsoft.com/en-us/library/ms251671(vs.80).aspx

segunda-feira, 14 de fevereiro de 2011

ASP.NET - Leitor de RSS


Olá pessoal, neste artigo irei mostrar como construir um leitor de RSS usando ASP.NET de maneira simples e com poucas linhas de código. Usaremos também o SQL Server.
Faço este artigo com base na videoaula de ASP.NET de Luiz Maia, do Portal Linha de Código, mediante autorização do mesmo. Acompanhem o passo-a-passo:
Para quem não conhece, RSS é a sigla de Really Simply Sindication e é uma forma muito usada para organizar informações provenientes de diversos sites e blogs da internet. Usa um formato de armazenamento de arquivos baseado no XML. Com esse leitor que criaremos, conseguimos acessar os famosos Feeds RSS, as fontes de informações de qualquer lugar da web. Ou seja, um Feed é um arquivo XML atualizado pelo site que o fornece, o qual podemos acessá-los através desse leitor que iremos criar.
Comece abrindo o SQL Server, crie um DataBase com o nome DBRss e crie uma tabela com o nome RSS. Nesta tabela, crie 3 colunas, como mostra a imagem abaixo:
Lembre-se de deixar a coluna IDRss como Identity.
Com as tabelas criadas, faça um INSERT para adicionar alguns link’s de RSS que irão alimentar nosso leitor. Para este exemplo, adicionei 5 link’s, mais você pode adicionar quantos quiser em sua tabela:
Com a instrução SQL SELECT * FROM RSS, vemos que os dados foram inseridos na tabela:
Ok, nossa tabela está com os dados que alimentarão nosso leitor. Agora vamos abrir o Visual Studio e criar um novo WebSite com o nome LeitorRSS.
Na página que se abriu, arraste da Toolbox um DropDownList e, na SmartTag que se abre, clique em Choose Data Source.
Na tela que se abre, clique em New Data Source, clique em DataBase e dê OK.
Nesta tela, irá perguntar qual DataBase será utilizado como fonte de dados do DropDownList, clique em New Connection. Na tela que surge, selecione o servidor SQL, seu DataBase, teste a conexão e clique em OK. Voltando para a tela, clique em Next.
Clique em Next na próxima tela, que pede pra salvar a string de conexão. Na próxima tela, selecione as 3 colunas de nossa tabela, que serão usadas como fonte de dados e clique em Next.
Se quiser, clique em Test Query e depois clique em Finish.
Agora no DataField, escolha o NomeRss e no ValueField o LinkRss.
Pronto, nosso DropDownList já está populado com os dados da tabela, que contém os link’s RSS.
Agora vamos arrastar da ToolBox, do submenu Data, o controle GridView. Faça algumas configurações na Smart Tag do GridView. Primeiro clique em Auto Format e escolha um estilo para nosso GridView.
Depois clique em Edit Columns, desmarque a opção Auto-generate Fields, adicione umHyperLinkField, altere o Header Text para Título, escolha o Target para _blank, para que quando o usuário clicar no RSS, ele abra em uma nova janela ou aba.
Altere o campo DataNavigateUrlField, digitando link, que é o campo que vem do XML. Altere também o campo ShowHeader para false e o campo DataTextField para title, que também virá do XML, dos RSS’s. Pronto, a aparência final de nosso GridView será essa:
Agora vamos codificar para que nosso GridView nos retorne os dados que vierem do banco quando for selecionado no DropDownList o Feed. Aperte F7 para ir a página de códigos e crie o seguinte método:
01private void PopulaGridView(string rss)
02 
03{
04 
05try
06 
07{
08 
09//instancio o DataSet e uso o comando ReadXml
10 
11//passando como parâmetro a variável rss
12 
13DataSet ds = new DataSet();
14 
15ds.ReadXml(rss);
16 
17//passo como DataSource ao meu GridView o ds.Tables, com  o valor 2
18 
19//como Default, usando a propriedade DefaultView e uso o método DataBind
20 
21GridView1.DataSource = ds.Tables[2].DefaultView;
22 
23GridView1.DataBind();
24 
25}
26 
27catch (Exception)
28 
29{
30 
31throw;
32 
33}
34 
35}
No método acima, instanciei o DataSet, chamei o método ReadXml, passando como parâmetro a variável rss, que representa o campo link de nossa base de dados. Com isso, obtemos os feeds rss. Depois atribuímos o item da tabela 2 (valor padrão) ao DataSource de nosso GridView. E por último usamos o comando DataBind.
PS: Como observação, digo que esses arquivos XML possuem como padrão 6 tabelas, que são a RSS, a Channel, a Item, a Category, a Attribute e a GeoID. Neste caso estamos utilizando a 3ª tabela, que é a Item. Por exemplo, abra no navegador um dos feeds RSS que você gravou no banco de dados, clique com o botão direito e clique em Exibir Código-Fonte que você verá a Channel e a Item, pelo menos.
Agora volte ao modo Design, clique no DropDownList, vá em Propriedades e altere a propriedade AutoPostBack para true, para que cada vez que for trocado um valor no DropDownList, a página sofra um postback. Nesta mesma janela de Propriedades, dê dois cliques no evento SelectedIndexChanged do DropDownList e chame o método que acabamos de criar:
1protected void ddlRss_SelectedIndexChanged(object sender, EventArgs e)
2 
3{
4 
5PopulaGridView(ddlRss.SelectedValue);
6 
7}
Chamei o método passando como parâmetro o DropDownList.SelectedValue, que será o RSS selecionado pelo usuário, ou seja, a cada valor selecionado, a página sofrerá um postback e atualizará o grid. Quem garante essa alteração é a propriedade AutoPostBack, que foi definida como true.
Salve seu projeto e compile. Escolha um feed no DropDownList e veja o resultado:
Como ele é do tipo HyperLink, aparece desta forma e, quando clicado, irá abrir em uma nova janela ou aba, já que escolhemos o target dele como _blank.
Se desejarmos aumentar o número de feed, é só fazermos um Insert na tabela de RSS. Simples e com poucas linhas de código.
Assim finalizo nosso artigo,
Para quem se interessar, disponibilizo o código fonte e o script desse projeto aqui.
Créditos à Luiz Maia, que fez as videoaulas e ao Linha de Código, por onde pude baixá-las (mediante assinatura), estudá-las e posteriormente fazer este artigo.
Quaisquer dúvidas, mandem emails para wellingtonbalbo@gmail.com ou deixem nos comentários deste artigo que responderei o mais breve possível.
Até o próximo artigo!