Archive

Posts Tagged ‘.net’

Evolua o MessageBox com TaskDialog

Olá Pessoal.

Neste post lhes apresento o Task Dialog. Perfeito para o cenário Windows Forms + C#, onde você precisa transmitir uma mensagem em tela para o operador do seu sistema.

Na versão Windows Vista em diante, a microsoft incluiu uma API de mensagens a TaskDialog, que expande muito as possibilidades de apresentação de mensagens em tela.

Você está limitado as possibilidades abaixo?

aparência de um message box

aparência de um message box

Porquê não expandir suas possibilidades de customização para isto?

Demonstrativo com todas as opções de customização da task dialog

Demonstrativo com todas as opções de customização da task dialog

Veja que você pode adicionar Radio Buttons, Botões de Comando, área expansível, para exibir detalhes da mensagem, mensagem de rodapé com ícone, etc.

Vai melhorar a legibilidade das suas mensagens, facilitando o entendimento, e criando a possibilidade do seu operador executar ações diretamente na mensagem.

API com Task Dialog: https://msdn.microsoft.com/en-us/library/windows/desktop/bb787471%28v=vs.85%29.aspx

Para não se preocupar com os detalhes da invocação desta API seguem 2 dicas:

Wrapper para Windows Vista ou superior: http://www.codeproject.com/Articles/17026/TaskDialog-for-WinForms

Wrapper que funciona também em versões anteriores do windows: http://www.codeproject.com/Articles/21276/Vista-TaskDialog-Wrapper-and-Emulator 

Valeu pessoal.

Abraço.

Criando Script para facilitar a instalação de Windows Service

Fala pessoal. Desenvolvi um Windows Service, e fui procurar as melhores formas de acelerar o processo: compila/desinstala versão anterior/instala versão nova, no ambiente de desenvolvimento. Pois ao desenvolver um Windows Service, para debugar temos que enfrentar essa rotina de registrar no S.O. 1ª abordagem: Tentei usar os “post-build” events, que podem ser configurados direto no Visual Studio, para que, sempre que eu compilasse, o VS já fizesse automaticamente este trabalho de desinstalar a versão anterior e instalar a nova. Problema: Precisa executar em modo administrador os comandos do Post-Build, o que me fez desistir de encontrar uma solução nesse sentido. 2ª abordagem: Criei um .BAT no Notepad++. O motivo de eu ter criado o .BAT fora do visual studio? Tudo que é criado no editor do visual studio, pega o encoding UTF-8, o que gera problemas na execução do batch. Justamente por isso, criei no notepad++, lembrando de colocar o encoding para ASCII. Problema: * Eu não sabia como obter o path do .bat, e não queria definir um path absoluto no script, pois dessa forma o script não serviria para outros desenvolvedores rodarem em suas máquinas. Solução: Usei como exemplo o seguinte código encontrado no stackoverflow: http://stackoverflow.com/questions/13934063/install-windows-service-as-easy-as-possible-with-visual-studio-2012 Com o .BAT criado, adicionei o arquivo no projeto com as seguintes propriedades: Copy to Output Directory = Copy always Build Action = None Dessa forma, sempre que o Build for executado, o .bat vai ser copiado para a pasta de output, ficando pronto para ser executado. Até a próxima.

Caixa de Ferramentas do Scott Hanselman 2014

Quero compartilhar com os leitores a lista de ferramentas do Scott Hanselman (edição 2014).

Scott Hanselman, trabalha para a Microsoft nos projetos OpenSource de ASP .NET e Azure, em seu home office em Portland, Oregon, USA.

 

Gostei bastante dessa lista que ele atualiza anualmente, pois contém diversas ferramentas para os heavy users.

O ecossistema de ferramentas para .NET é muito extenso, e é muito fácil ficar perdido entre tantas opções.

 

No site, as ferramentas estão agrupadas por categoria, com links e uma breve descrição com comentário.

http://www.hanselman.com/blog/ScottHanselmans2014UltimateDeveloperAndPowerUsersToolListForWindows.aspx

jQuery DataTables obtendo dados no Api Controller com ASP NET MVC

Conhecimentos necessários:

* Ter conhecimento prévio de como funciona o data tables.

* Referenciar scripts e css necessários.

Página oficial jQuery Data Tables

grid jquery data tables

Grid do jQuery DataTables

Etapas:

  • Criar método para retornar os dados para o jquery data tables no seu controller. A assinatura do método é a seguinte.
  • Código no lado do servidor:
public class DataController : ApiController
{
public dynamic GetJdt(int sEcho,
int iDisplayStart,
int iDisplayLength,
string sSearch,
int iSortCol_0,
string sSortDir_0)
{
// Utilizando LINQ para fazer a consulta em uma Session do NHibernate</pre>
var consulta = sessao.Query<Objeto>().AsQueryable();

 // Seta os termos da busca
 if (!String.IsNullOrEmpty(sSearch))
 {
 consulta =
 consulta.Where(
 wh =>
 wh.Coluna1.ToLower().Contains(sSearch.ToLower()));

 }

// Total de registros para cálculo de paginação
 var quantidadeRegistrosSemFiltro = consulta.Count();

// Ordenação
 string colunaOrdenacao = "Id";
 switch (iSortCol_0)
 {
 case 0:
 colunaOrdenacao = "Id";
 break;
 case 1:
 colunaOrdenacao = "Coluna1";
 break;
 case 2:
 colunaOrdenacao = "Coluna2";
 break;
 case 3:
 colunaOrdenacao = "Coluna3";
 break;
 case 4:
 colunaOrdenacao = "Coluna4";
 break;
 case 5:
 colunaOrdenacao = "Coluna5";
 break;
 }

consulta = consulta.OrderByField(colunaOrdenacao, sSortDir_0 == "asc");
// Aqui eu usei um método de extensão para converter strings em uma expression linq:

//<a href="http://ronniediaz.com/2011/05/24/orderby-string-in-linq-c-net-dynamic-sorting-of-anonymous-types/">http://ronniediaz.com/2011/05/24/orderby-string-in-linq-c-net-dynamic-sorting-of-anonymous-types/</a>

// Adiciona paginação e já faz uma projeção dos dados através do select
 var resultadoConsulta = consulta.Skip(iDisplayStart).Take(iDisplayLength).Select(
 sel =>
 new
 {
 Id = sel.Id,
 Coluna1 = sel.Coluna1,
 Coluna2 = sel.Coluna2,
 Coluna3 = sel.Coluna3,
 Coluna4 = sel.Coluna4,
 Coluna5 = sel.Coluna5
 }
 ).ToArray();

var quantidadeTotalRegistrosAposPaginacao = resultadoConsulta.Count();

// pega o retorno e coloca em uma variável
var retorno = new
 {
 sEcho = sEcho,
 iTotalRecords = quantidadeRegistrosSemFiltro,
 iTotalDisplayRecords = quantidadeTotalRegistrosAposPaginacao,
 aaData = resultadoConsulta
 };

// retorna o objeto que é automaticamente convertido para JSON pelo API controller
return retorno;
}

}
  • Código no lado do cliente:
<script type="text/javascript">// <![CDATA[
 $(document).ready(function(){
 $('.dataTable').dataTable({
 "bJQueryUI": true,
 "bProcessing": true,
 "bServerSide": true,
 "sAjaxSource": "/api/produtos/getjdt",
 "aoColumns": [
 { "mDataProp": "Coluna1" },
 { "mDataProp": "Coluna2" },
 { "mDataProp": "Coluna3" },
 { "mDataProp": "Coluna4" },
 { "mDataProp": "Coluna5"}
 ]
 });
 });

// ]]></script>

Dessa forma o jQuery Data Table vai carregar os dados dinamicamente, com AJAX.

Importante:

  • Número de colunas da tabela deve ser o mesmo retornado nos dados e na criação da data table especificar as colunas através da propriedade aoColumns como mostrado acima., para evitar um erro semelhante a esse:

DataTables warning (table id = ‘myTable’): Requested unknown parameter ‘2’ from the data source for row 0

Referências:
JQuery Datatables warning: Requested unknow parameter…

Using MVC 4 Web Api with jQuery DataTables

Operador Yield em C#

Recentemente criando um método que retorna IEnumerable, fiz um esforço pra lembrar desse operador mas só consegui lembrar dele agora, depois de constatar sua existência no Ruby: “yield é a palavra reservada de Ruby que pega um ou mais objetos, envia para um bloco para processá-los e devolve o retorno do bloco.”.
No C# podemos utilizar o yield na seguinte situação:

Exemplo Comum de método que retorna uma Estrutura de Dados IEnumerable SEM Yield:

public static IEnumerable<int> Exemplo1(int numero)
        {
            var res = new List<int>();

            for (int i = 0; i < numero; i++)
            {
                res.Add(i);
            }

            return res;
        }

Exemplo Comum de método que retorna uma Estrutura de Dados IEnumerable COM Yield:

public static IEnumerable<int> Exemplo2(int numero)
        {
            for (int i = 0; i <= numero; i++)
                yield return i;
        }

Yield deixa o código mais limpo.
Vale a pena utilizá-lo.


Fontes:
http://blastersystems.com/blog/2009/10/o-operador-yield-c/
http://umamao.com/questions/O-que-faz-a-palavra-reservada-yield-em-Ruby/answers/4dace8c4d196cb6feb0001b0
http://unplugged.giggio.net/unplugged/post/Porque-eu-adoro-C-yield.aspx

Categorias:C#, Dicas / Tips Tags:, , , ,

Validar CNPJ em C#

Mais uma dica no estilo: Copiar, colar e utilizar.

public static bool TestaCnpj(string Cnpj)
{
    string Cnpj_1 = Cnpj.Substring(0, 12);
    string Cnpj_2 = Cnpj.Substring(Cnpj.Length - 2);
    string Mult = "543298765432";
 
    string Controle = String.Empty;
    int Digito = 0;
    for (int j = 1; j < 3; j++)
    {
 
        int Soma = 0;
        for (int i = 0; i < 12; i++)
        {
            Soma += Convert.ToInt32(Cnpj_1.Substring(i, 1)) * Convert.ToInt32(Mult.Substring(i, 1));
        }
 
        if (j == 2)
        {
            Soma += (2 * Digito);
        }
 
        Digito = ((Soma * 10) % 11);
 
        if (Digito == 10)
        {
            Digito = 0;
        }
 
        Controle = Controle + Digito.ToString();
        Mult = "654329876543";
    }
 
    return (Controle != Cnpj_2);
}
Categorias:Dicas / Tips Tags:, , , ,

Validar CPF em C#

10 - 11 2 comentários

Mais uma dica no estilo: Copiar, colar e utilizar.

public static bool ValidaCpf(string cpf)
{

    int[] multiplicador1 = new int[9] { 10, 9, 8, 7, 6, 5, 4, 3, 2 };
    int[] multiplicador2 = new int[10] { 11, 10, 9, 8, 7, 6, 5, 4, 3, 2 };
    string tempCpf;
    string digito;

    int soma;
    int resto;

    cpf = cpf.Trim();
    cpf = cpf.Replace(".", "").Replace("-", "");

    if (cpf.Length != 11)
    {
        return false;
    }
    tempCpf = cpf.Substring(0, 9);

    soma = 0;

    for (int i = 0; i < 9; i++)
    {
        soma += int.Parse(tempCpf[i].ToString()) * (multiplicador1[i]);
    }
    resto = soma % 11;

    if (resto < 2)
    {
        resto = 0;
    }
    else
    {
        resto = 11 - resto;
    }

    digito = resto.ToString();
    tempCpf = tempCpf + digito;
    int soma2 = 0;

    for (int i = 0; i < 10; i++)
    {
        soma2 += int.Parse(tempCpf[i].ToString()) * multiplicador2[i];
    }

    resto = soma2 % 11;

    if (resto < 2)
    {
        resto = 0;
    }
    else
    {
        resto = 11 - resto;
    }

    digito = digito + resto.ToString();
    return cpf.EndsWith(digito);
}
Categorias:Dicas / Tips Tags:, , , ,

Serializando objeto para XML

Quando estamos desenvolvendo um software, sempre temos a necessidade de parametrizar nosso software, seja no banco de dados, registro ou qualquer outra forma de persistir informações.
Nesse post vou explicar uma forma fácil e rápida de persistir informações, tomando como utilização prática um arquivo de configurações / parâmetros de sistema, além de servir como base para qualquer momento onde você precise serializar um objeto para enviar via web, e etc.

Para isso vamos serializar um objeto para XML.

Continue lendo… Leia mais…

Queries LINQ deferidas

No post Métodos de Extensão LINQ mais utilizados demonstrei métodos linq mais comuns quando se está desenvolvendo consultas LINQ.

Agora explico a diferença de métodos deferidos e métodos não-deferidos. Essa variação se refere a forma com que os métodos de uma query LINQ são executados. Uma query que contém somente métodos deferidos não executada enquanto não for executado um método não-deferido tipo: ToList(), ToArray() etc.

Continue lendo… Leia mais…

dotnettips.wordpress.com/

Helping Programmers Since 1994

Viagem e Voo

Dicas para viagens, férias e voos nacionais e internacionais

Ivan Guimarães Meirelles

Analista Desenvolvedor

Void Podcast

Vazio e sem retorno de valor

Elemar DEV

Negócios, tecnologia e desenvolvimento

2,000 Things You Should Know About WPF

Everything a WPF Developer Needs to Know, in Bite-Sized Chunks

blog

so long

Fernando Franzini Blog

Engenharia de Software e Arquitetura Ágil

Gabriel RB.net

Blog técnico, com dicas, códigos, novidades e problemas do dia-a-dia programando.

Alexandre Valente's Blog

Experiências em tecnologia e assuntos diversos

%d blogueiros gostam disto: