Neste post, irei falar sobre os relatórios que são imprescindíveis em qualquer projeto, independente da complexibilidade.
Demonstrarei um exemplo que utiliza o excel como base, a grande vantagem neste caso é flexibilidade para o usuário que mais habituado com as ferramentas do office conseguirá adaptar, formatar e personalizar os dados extraídos conforme sua necessidade.
Vamos começar ?!
Criei uma página aspx:
No aspx: inclui uma label
<asp:Label ID="lblWarning" runat="server"></asp:Label>
No aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
//inclui a chamada do método GenerateExcel()
GenerateExcel();
}
//Método para gerar o relatório em excel
protected void GenerateExcel()
{
StringBuilder excel = new StringBuilder();
try
{
//StringBuilder excel vai receber o conteúdo do método GetHeader()
excel.Append(GetHeader());
//StringBuilder excel vai receber o conteúdo do método GetRecords()
excel.Append(GetRecords());
//Se estiver definido como true, o ASP.NET processará toda a página e depois de concluído, mandará o output para o cliente
//Se estiver definido como false, o ASP.NET já irá enviando o output para o cliente na medida em que a página vai sendo processada
HttpContext.Current.Response.BufferOutput = false;
//Limpa o response
HttpContext.Current.Response.Clear();
//Nome dado para salvar o relatório. Por exemplo: relatório gerado dia 30/03/2009 vai ter o nome de: rel_participants_30/03/2009
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=rel_participants_" + DateTime.Now.ToString("d") + ".xls");
//Tipo de aplicação que será gerado o relatório. Aqui será p excel.
HttpContext.Current.Response.ContentType = "application/ms-excel";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.Unicode;
//StringBuilder excel vai receber tudo que está no response
HttpContext.Current.Response.Write(excel.ToString());
//Envia imediatamente ao browser todo o conteúdo em buffer
HttpContext.Current.Response.Flush();
//Finaliza o response e é exibido até a linha onde se encontra o comando
HttpContext.Current.Response.End();
}
catch
{
//A label criada no aspx só serve para mostrar a mensagem de erro, caso ocorra problemas ao gerar o relatório
lblWarning.Text = "Ocorreu um erro durante geração do relatório. Tente novamente.";
}
}
//Método que retorna o cabeçalho do relatório
private string GetHeader()
{
StringBuilder header = new StringBuilder();
header.Append("Data" + "\t");
header.Append("Nome" + "\t");
header.Append("Endereço" + "\t");
header.Append("Email" + "\t");
header.Append("Telefone" + "\t");
header.Append("Celular" + "\t");
header.Append("Sexo" + "\t");
header.Append("Data de aniversário" + "\t");
header.Append("RG" + "\t");
header.Append("Nome do responsável" + "\t");
header.Append("RG do responsável" + "\t");
header.Append("Como ficou sabendo da promoção" + "\t");
header.Append("Login" + Environment.NewLine);
return (header.ToString());
}
//Método que retorna os registros do relatório
private string GetRecords()
{
StringBuilder records = new StringBuilder();
//Incluir o método que irá trazer os registros que necessitem para seu relatório
//No meu caso, fiz um método que retorna uma lista de participantes
foreach (Participant participants in Participant.ListParticipants())
{
//Preenchimento dos campos que mostrarei no meu relatório
records.Append(participants.DateIns.ToString("d") + "\t");
records.Append(participants.Name + "\t");
records.Append(participants.Address + "\t");
records.Append(participants.Email + "\t");
records.Append(" " + participants.Phone + "\t");
records.Append(" " + participants.Cell + "\t");
records.Append(participants.Sex + "\t");
records.Append(" " + participants.DateOfBirth.ToString("d") + "\t");
records.Append(" " + participants.Rg + "\t");
records.Append(participants.ResponsableName + "\t");
records.Append(" " + participants.ResponsableRg + "\t");
records.Append(participants.KnowAsThePromotion + "\t");
records.Append(participants.Login + Environment.NewLine);
}
return (records.ToString());
}
Realizados todos esses passos, ao acessar essa página irá ser exibida a caixa de diálogo e o relatório abaixo: