segunda-feira, 21 de junho de 2010

O Delphi é um poeta! #3

Esse aqui duvido!!!



Revogar um destino???

terça-feira, 8 de dezembro de 2009

Exportar GridView para Excel Delphi ASP.NET

Olá pessoal!

Após muita consulta no Google não encontrei nenhum exemplo que funcionasse perfeitamente no Delphi para exportar os dados de uma Grid para o Excel, então adaptei alguns em VB, outros em C# e hoje de manhã finalmente o negócio funcionou. Agora estou aqui para compartilhar com vocês, segue o código fonte da função para exportar:


procedure Texportarexcel.Button1_Click(sender: TObject; e: System.EventArgs);
var
sw: System.IO.StringWriter;
htw: HtmlTextWriter;
sb: StringBuilder;
form: HtmlForm;
pagina: System.Web.UI.Page;
begin
sb := stringbuilder.Create;
sw := StringWriter.create(sb);
htw := HtmlTextWriter.create(sw);
pagina := System.Web.UI.Page.Create();
form := HtmlForm.create();
gvDados.EnableViewState := false;
pagina.EnableEventValidation := False;
pagina.DesignerInitialize();
pagina.Controls.Add(form);
form.Controls.Add(gvDados);
pagina.RenderControl(htw);
Response.Clear();
Response.ClearContent();
Response.Buffer := True;
Response.ContentType := 'application/vnd.ms-excel';
Response.AddHeader('Content-Disposition', 'attachment;filename=data.xls');
Response.Charset := 'UTF-8';
Response.ContentEncoding := Encoding.Default;
Response.Write(sb.ToString());
Response.&End;
end;


Nesta página que fiz para testar tenho um Button e uma GridView (gvDados), o código acima está no evento OnClick do Button1, antes de exportar a grid é óbvio que ela precisa ter dados, mas isto já não é o objetivo deste post, espero que o código seja útil para alguém, abraços!

Obs.: Não esqueçam de comentar e visitem o Blog do Bolívar!

quarta-feira, 27 de maio de 2009

Resultados no rodapé do GridView

Boenas pessoal, retornando depois de um baita tempo sem postar aki...

Esta semana precisei exibir resultados no rodapé do GridView, aki no blog tem um post sobre o DataGrid, porém é um pouco diferente.

Vamos calcular a média dos valores de uma coluna, sem precisar ir ao banco para tal. No evento DataBound do Grid View:

var
  soma:Integer
begin
  for I := 0 to GridView1.Rows.Count - 1 do
  begin
  Soma := Soma+Int32.Parse(GridView1.Rows[I].Cells[1].Text);
  end;
end;

Esse loop irá percorrer as linhas e somará os valores da coluna 1 do grid. Após isso basta calcular a média, para isso crie uma variável 'media' do tipo Double:

media := Soma/I;

Pronto, agora basta mostrar o resultado no rodapé:

GridView1.FooterRow.Cells[0].Text := 'Média dos Valores:';
GridView1.FooterRow.Cells[0].HorizontalAlign := HorizontalAlign.Right;
GridView1.FooterRow.Cells[1].Text := media.ToString('n');
GridView1.FooterRow.Cells[1].HorizontalAlign := HorizontalAlign.Center;

Na coluna 0 estamos mostrando o texto e na 1 a média dos valores já formatada.

Um abraço.

PS: Não esqueçam de visitar o Blog do Signori !

terça-feira, 5 de maio de 2009

Enviando e-mail no DELPHI for ASP.NET utilizando GMail

Olá pessoal, neste pequeno tutorial pretendo mostrar um exemplo simples de envio de e-mail em ASP.NET utilizando os serviços do Gmail e DELPHI 2007 for .NET, dica do Edinei.

Primeiramente vamos criar uma nova aplicação, File -> New -> ASP.NET Web Application.



Feito isso, adicione três TextBox, um Button e uma Label, renomeie a propriedade ID das textboxes para: txbdestinatario, txbassunto e txbmensagem respectivamente, a Label para lblretorno e o Button para btnenviar, aumente o tamanho das textboxes de acordo com sua preferência e mude a propriedade textMode da txbmensagem para “Multiline”. Apague o que tiver na propriedade Text da lblretorno e mude a propriedade Text do btnenviar para “Enviar E-mail”. O formulário deve ficar parecido com o da imagem abaixo.



O txtdestinatario vai receber o endereço de e-mail que se deseja enviar uma mensagem, txbassunto o assunto e txbmensagem a mensagem, a lblretorno irá mostrar se o e-mail foi enviado com sucesso ou se ocorreu algum erro durante o envio e o btnenviar chamará a função de envio de e-mail.

Para usar as funções de envio de e-mail do .NET, é necessário adicionar as seguintes bibliotecas na uses.


Uses
System.Net.Mail, System.Net.Configuration, System.Text, System.Net;

Feito isso, de um duplo clique no btnenviar e implemente a função que vai enviar o e-mail através do serviço de envio de e-mail da Google, o gmail, veja função abaixo.

procedure TDefault.btnEnviar_Click(sender: TObject; e: System.EventArgs);
var
EmailRemetente: string;
NomeRemetente: string;
Mail: MailMessage;
Client: SmtpClient;
begin
Mail := MailMessage.create;
Client := SmtpClient.create;
EmailRemetente := 'seuEmail@gmail.com'; // O e-mail do remetente
NomeRemetente := 'Seu Nome'; // O nome do remetente
try
Mail.&To.Add(txbDestinatario.text); // Destinatário
Mail.From := MailAddress.create(EmailRemetente, NomeRemetente, System.Text.Encoding.UTF8);
Mail.Subject := txbassunto.text; // Assunto do E-mail
mail.SubjectEncoding := System.Text.Encoding.UTF8;
mail.Body := txbmensagem.text; // Mensagem do e-mail
mail.BodyEncoding := System.Text.Encoding.UTF8;
mail.IsBodyHtml := true;
mail.Priority := MailPriority.High; // Prioridade do E-Mail
client.Credentials := NetworkCredential.create(EmailRemetente, 'AquiSuaSenha'); // usuário e senha do Gmail
client.Port := 587; // Esta porta é a utilizada pelo Gmail para envio
client.Host := 'smtp.gmail.com'; // Definindo o provedor que irá disparar o e-mail
client.EnableSsl := true; // Gmail trabalha com Server Secured Layer
try
client.Send(mail);
lblretorno.text := 'E-mail enviado com sucesso!';
except on erro:exception do
lblretorno.text := 'Erro ao tentar enviar e-mail. '+erro.message;
end;
finally
client.free;
mail.free;
end;
end;

Depois de implementada a função é só compilar e executar (CTRL+SCHIFT+F9) para testar o envio de e-mails.

Até.

Referências: http://www.devmedia.com.br/articles/viewcomp.asp?comp=12520

quarta-feira, 8 de abril de 2009

Erros no DELPHI


Este errinho é chato, se alguém souber resolver me avisa.

sexta-feira, 20 de março de 2009

Performance em ASP.NET: Desabilitar ViewState na Aplicação Inteira

Olá pessoal!

O ViewState é uma string armazenada em um campo oculto no HTML gerado para a sua página. Ele guarda os dados sobre a página e seus componentes, concatenado com um hash gerado no servidor para evitar ataques onde alguma pessoa maliciosa altere o conteúdo dessa string e faça um postback para o seu servidor. Essa string está em Base64, e é simples decodificar, como por exemplo usando o ViewState Decoder.

Cada componente colocado em uma página ASP.Net salva o seu estado no ViewState, para que cada vez que acontecer um postback esse componente possa voltar a ser exibido exatamente como estava antes, sem precisar fazer nova inicialização ou trazer os dados novamente do banco de dados, e assim por diante. Isso é prático, mas pode deixar o ViewState incrivelmente grande e aumentar bastante o tamanho da sua página e o tempo de carregamento por consequência.

Em páginas onde é desnecessário essa característica é recomendável desabilitar o ViewState ou então manter ele ativo apenas nos componentes em que é necessário, isso trará um aumento de performance na sua aplicação pois o navegador não precisará ficar enviando e recebendo essa string toda vez que é feita alguma requisição.

Por padrão o ViewState vem como True nos elementos, mas isso pode ser alterado facilmente mudando a propriedade EnableViewState para False. Agora se a sua aplicação já está pronta ou com a maior parte desenvolvida, você pode desativar o ViewState na aplicação inteira inserindo no arquivo web.config ou no machine.config o seguinte código:








Por enquanto é isso, para saber mais sobre o ViewState recomendo a leitura das referências, são dois excelentes artigos.

Referências
DotNetJohn || TechTips

quinta-feira, 19 de março de 2009

Artigo Nº 20: Concatenando resultados diretamente na SQL

Hoje vai aí um post sobre SQL, simples mas muito útil: concatenação de resultados em um select.

Acredito que quase todos os programadores em algum momento, precisou concatenar várias colunas de uma função select, agrupando em uma única coluna. Para isso, quem não conhece ou conhecia esse tipo de concatenação, resolve agrupando no próprio código de programação. Um exemplo que posso escrever é: para programadores .net que trabalha com POO(Programação Orientadas a Objetos) ou em camadas, resolve esse problema criando uma function que vai retorna em um formato de DateTable, dentro dessa function monta a SQL, depois manda executa a função para retornar os dados. Daí depois de passar pelo banco, lê cada resultado e manualmente cria-se uma nova coluna onde o valor vai ser a concatenação entre os duas ou mais colunas do resultado: Ex: Coluna 03 = ColunaSQL1 +'/'+ ColunaSQL2;

Bom, aí vai os exemplos de como proceder em diversos bancos de dados:

FIREBIRD
SELECT (COLUNA1 ||' - '|| COLUNA2) as RESULTADO from TABELA

SQL SERVER
SELECT (CAST(COLUNA1 AS VARCHAR)+' - '+ CAST(COLUNA2 AS VARCHAR)) AS RESULTADO FROM TABEL

POSTGREE
SELECT (COLUNA1 ||' - '|| COLUNA2) AS RESULTADO FROM TABELA

MYSQL
SELECT CONCAT(COLUNA1,' - ',COLUNA2) AS RESULTADO FROM TABELA

Esses são os exemplos de concatenação. Pode-se concatena quantas colunas que necessita, sempre seguindo as sintaxe.

Caso sua aplicação está voltada para conexão independente de banco, tome cuidado ao utilizar essas funções, crie uma forma de parametrizações que quando trocar de banco chame a sintaxe de acordo com o banco.

Obrigado. Abraços.