Mostrar mensagens com a etiqueta Dicas de C#. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Dicas de C#. Mostrar todas as mensagens

quinta-feira, 30 de maio de 2019

Como humanizar o formato dos DateTime em C#


Datas humanizadas são mais fáceis de ler. Eles estão bem formatados. Podemos mostrar "1 hora atrás" ou "1 minuto atrás", em vez do formato padrão, confuso. Hoje quero apresentar apenas um algoritmos que nos ajudarás a obter esse resultado em c#.

O Algoritmo


public static string GetDataHumanizada(DateTime d)
        {

            // Obtém o intervalo de tempo decorrido até a data actual.
            TimeSpan s = DateTime.Now.Subtract(d);

            int diasTotal = (int)s.TotalDays;
            int segundosTotal = (int)s.TotalSeconds;

            // Se o total de dias for superior à 31 dias ou inferior a zero
            // retornamos a data inserida no argumento.
            if (diasTotal < 0 || diasTotal >= 31)
            {
                return d.ToShortDateString();
            }

            if (diasTotal == 0)
            {
                // Menor que 1 minuto
                if (segundosTotal < 60)
                {
                    return "Agora mesmo";
                }
                // Menor que 2 minutos
                if (segundosTotal < 120)
                {
                    return "1 minuto atrás";
                }
                // Menor que 1 hora
                if (segundosTotal < 3600)
                {
                    return string.Format("{0} minutos atrás",
                        Math.Floor((double)segundosTotal / 60));
                }
                // Menor que 2 horas
                if (segundosTotal < 7200)
                {
                    return "1 hora atrás";
                }
                // Menor que 1 dia
                if (segundosTotal < 86400)
                {
                    return string.Format("{0} horas atrás",
                        Math.Floor((double )segundosTotal / 3600));
                }
            }
            // Completou um dia
            if (diasTotal == 1)
            {
                return "Ontem";
            }
            // Menor que 1 semana
            if (diasTotal < 7)
            {
                return string.Format("{0} dias atrás",
                    diasTotal);
            }
            // Menos que 1 mês
            if (diasTotal < 31)
            {
                return string.Format("{0} semanas atrás",
                    Math.Ceiling((double)diasTotal / 7));
            }
            return null;
        }

Como usar?


Deixa-me dar um exemplo rápido de como usar:

    static void Main()
    {

    DateTime dataPublicacao = new DateTime(2019, 5, 30,21,15,36);
     //Data de Publicacao é: 30/05/2019 21:15:36
        
        Console.WriteLine(GetDataHumanizada(dataPublicacao));
        Console.ReadKey();

        // Resultado: 4 minutos atrás  
        // Onde dada do sistema é: 30/05/2019 21:15:32        
    }

Conforme o nosso algoritmo está podemos humanizar a data apenas até semanas. Se queres um desafio, altere-o até meses ou mesmo até anos. Espero ter ajudado.
Um forte abraço.

quinta-feira, 25 de abril de 2019

Como gerar sequências numéricas em SQL numa consulta ou select?

Sem muitas voltas, te digo: Use a função Row_Number() do Sql Server.
Confira no exemplo a seguir.

Select Row_Number() Over(Order By idAluno) as Ordem, idAluno, NomeAluno
From Aluno
Where idTurma = 2

Resultado:



Isso é tudo, apenas olhe para essa instrução como um modelo para o que realmente desejas, ou comente o para eu te ajudar.

segunda-feira, 28 de janeiro de 2019

Como colocar mensagem no DataList quanto está Vazio (Empty) no asp.net?


Como colocar a mensagem no DataList quanto está Vazio ou Empty conforme se faz no GridView do Asp.net?

O GridView possui a propriedade EmptyDataText que serva para colocar a mensagem de erro ou "not find" mas infelizmente o DataList e o ListView não têm esse propriedade. Para resolver este problema siga a solução abaixo:

<asp:DataList ID="dlFunc" runat="server" RepeatColumns="4">
        <ItemStyle CssClass="CardSeparation" />
        <ItemTemplate>
            <%-- area para campos --%>
        </ItemTemplate>
        <FooterTemplate>
            <asp:Label Visible='<%#bool.Parse((dlFunc.Items.Count==0).ToString())%>'
                runat="server" ID="lblNoRecord" Text="Documento não encontrado!"></asp:Label>
        </FooterTemplate>
    </asp:DataList>

Isso está criando uma lable no rodapé de DataList e torná-lo visível somente se a contagem de registro DataList é 0.

<asp:Label Visible='<%#bool.Parse((dlFunc.Items.Count==0).ToString())%>'
                runat="server" ID="lblNoRecord" Text="Documento não encontrado!">

Espero ter te ajudado. Um forte abraço!

segunda-feira, 21 de janeiro de 2019

Entity Framework - Como listar tabela dinamicamente através do seu nome?




       public IQueryable GetMyTable(string tipo)
        {
            MyDbContext context = new  MyDbContext();
            Type type = Type.GetType($"teu_namespace.{tipo}");
            if (type != null)
                return context.Set(type).AsQueryable();
            return null;
        }

O segredo todo está no método Set. Muitas pessoas que encontram esse problema usaram esse método de maneira errada, colocando o  Set<Type>. Isso sempre gerá o erro: "is a type but used as a class".

Para evitar esse problema use o Set(string) é a melhor forma para dinamizar o teu código.

sexta-feira, 21 de setembro de 2018

Por que você pode querer usar CGI com C#?

O que é o CGI?

O Common Gateway Interface, ou CGI, é um padrão W3C de longa data para comunicação entre uma página da web e um aplicativo disponível no servidor web. Os aplicativos no servidor que se comunicam no CGI têm todas as funcionalidades de qualquer outro aplicativo nativo, como acesso ao banco de dados ou leitura de arquivos de entrada. No entanto, no mundo atual, com ASP.NET, PHP, Perl e muitas outras linguagens de script que fornecem essencialmente a mesma funcionalidade, você pode se perguntar por que se incomodaria em criar seu próprio aplicativo CGI com C #. Existem algumas razões que posso pensar que podem ser aplicadas.

Motivo 1

Primeiro, os interpretadores para ASP, PHP, Perl, etc. são essencialmente aplicativos aproveitando o CGI. Em muitos casos, eles são criados diretamente no serviço da Web (como com ISAPI para IIS), mas todos eles também estão disponíveis em suas aparências CGI (ASP disponível como CGI por meio do projeto Mono da Novel). Para entender melhor os recursos e a limitação da sua linguagem de script favorita do servidor, você pode estar interessado em saber como ela funciona em um nível inferior.

Motivo 2

Outra razão é que você pode escrever seu próprio intérprete de mini-scripts. Linguagens como ASP são de propósito geral e, embora possam fazer qualquer coisa, algumas coisas poderiam ser melhor realizadas com um script de propósito mais específico.

Por exemplo, isso descreve a razão pela qual eu investiguei pela primeira vez o reino de CGI e C#. Minha empresa tem uma demanda muito alta por relatórios. Apesar de uma ampla gama de ferramentas disponíveis para os funcionários, o site continua sendo o principal recurso para seus relatórios personalizados devido a muitas viagens. Todos os relatórios têm uma variedade de requisitos gráficos muito exigentes, desde formatação, até gráficos, até o fornecimento de uma pasta de trabalho do Excel gerada dinamicamente. O código ASP estava começando a parecer assustador, então criamos um aplicativo C# personalizado para interpretar uma linguagem de relatório tão específica às necessidades de nossos negócios que até mesmo usuários avançados não programadores podem ajudar na criação e modificação das necessidades de relatórios. (Um tópico para outro artigo? diz que sim no comentário.)

Motivo 3

Outro benefício para CGI é que ele é agnóstico do servidor web. O mesmo executável funcionará para o IIS como para o Apache, como para qualquer outro servidor da Web compatível com o W3C. E, ao contrário de algumas linguagens de script, o executável é compilado para que a execução seja rápida e a origem não esteja visível.

C# é uma excelente linguagem para usar com CGI por causa do poder do .NET framework. Também é possível testar um aplicativo C# utilizando CGI, mesmo sem um servidor da Web, porque ele simplesmente é executado como um aplicativo de console. Mais sobre isso depois.

Motivo 4

Finalmente, existem provedores de serviços da Web que permitem usar aplicativos CGI personalizados que podem não permitir o uso de módulos Apache ou ISAPI IIS DLLs. O motivo é que um módulo integrado em um servidor da Web pode causar muito mais danos ao servidor da Web do que um executável separado e controlável.

Gostou? Comenta o que mais te interessou!


sexta-feira, 31 de agosto de 2018

Como exportar Crystal Report para PDF e Excel (código completo)

Vamos aprender, de forma rápida, como exportar um relatório de Crystal Report para os formatos PDF e Excel. Como exemplo vou pegar o projecto que fizemos no post anterior. Clica aqui para ver.

Adicione os botões "Exportar PDF" e "Exportar Excel" no formulário para exportar o relatório.



Para o botão "Exportar PDF" coloque o seguinte código:


private void btnExportToPDF_Click(object sender, EventArgs e)
{
            SaveFileDialog dialog = new SaveFileDialog();
            dialog.Filter = "Arquivo PDF|*.pdf";
            string nomeArquivo="";
            if(dialog.ShowDialog()== DialogResult.OK)
            {
                nomeArquivo = dialog.FileName;
            cr.ExportToDisk(ExportFormatType.PortableDocFormat, nomeArquivo);
            }
            
}

Para o botão "Exportar Excel" coloque o seguinte código:

private void btnExportToExcel_Click(object sender, EventArgs e)
{
            SaveFileDialog dialog = new SaveFileDialog();
            dialog.Filter = "Arquivo Excel|*.xls";
            string nomeArquivo = "";
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                nomeArquivo = dialog.FileName;
            cr.ExportToDisk(ExportFormatType.Excel, nomeArquivo);
            }

}

Como podemos ver, para os dois botões, colocamos um SaveFileDialog para o utilizador poder escolher a pasta e o nome do arquivo.



Executa o programa e testa cada botão. Espero te ajudado.

Código completo deste projecto.


public partial class FormPaises : Form
    {
        public FormPaises()
        {
            InitializeComponent();
        }
        Reports.ReportPaises2 cr = new Reports.ReportPaises2();

        private List<Pais> GetListaPaises()
        {
            List<Pais> Paises = new List<Pais>
            {
                new Pais(1, "Angola"),
                new Pais(2, "Brasil"),
                new Pais(3, "Portugal"),
                new Pais(6, "Moçambique"),
                new Pais(7, "Cabo-Verde"),
                new Pais(8, "Namibia")
            };

            return Paises;
        }

        private void FormPaises_Load(object sender, EventArgs e)
        {
            crystalReportViewer1.ReportSource = cr;

            cr.SetDataSource(GetListaPaises());

        }

        private void btnExportToPDF_Click(object sender, EventArgs e)
        {
            SaveFileDialog dialog = new SaveFileDialog();
            dialog.Filter = "Arquivo PDF|*.pdf";
            string nomeArquivo="";
            if(dialog.ShowDialog()== DialogResult.OK)
            {
                nomeArquivo = dialog.FileName;
            cr.ExportToDisk(ExportFormatType.PortableDocFormat, nomeArquivo);
            }
         

        }

        private void btnExportToExcel_Click(object sender, EventArgs e)
        {
            SaveFileDialog dialog = new SaveFileDialog();
            dialog.Filter = "Arquivo Excel|*.xls";
            string nomeArquivo = "";
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                nomeArquivo = dialog.FileName;
            cr.ExportToDisk(ExportFormatType.Excel, nomeArquivo);
            }


        }
    }

Pesquisar neste blogue

Com tecnologia do Blogger.

Páginas