Archive for category .NET

Primeiro curso da Bit Zero

Conforme divulgado aqui e aqui, eu e Iury lecionamos um curso de Férias de ASP.NET que iniciou no dia 14/12 e terminando ontem, dia 24/12, superando nossas espectativas.

Com o ótimo feed back que recebemos dos alunos, resolvemos criar uma matéria legal com fotos de um dia nosso de curso. Em especial o dia em que chegaram as camisas da M$.

Vale ressaltar que os alunos são muito bons. É fato que ao criar um Curso de Férias, somente alunos e profissionais interessados em aprender e desenvolver novas habilidades é que fazem a inscrição, o que proporciona um curso muito melhor para todos, diferente de um Colégio, uma Faculdade ou Universidade que temos por aí.

DSC02279

Subindo as escadas olha o que encontramos! Bora para sala 08!

DSC02280

Opa! Sala 08

DSC02281

Eu e Iury com a camisa pra ficar bonito na foto… Ou não

DSC02283 DSC02282

Do lado da primeira plaquinha de cursos da Bit Zero

DSC02290

Equipe completa (alunos e professores) na hora do Coffee Break

DSC02292

Hora de estudar!

DSC02294

Infelizmente alguns alunos não sairão nas fotos pois faltaram justamente no dia em que decidimos fazer a cobertura. Como o curso está andando muito bem, decidimos por bem organizar um curso especial sobre a tecnologia LINQ para o mês de Janeiro. Em breve será divulgado com mais detalhes na Bit Zero.

Segue um feed back por escrito que recebemos dos alunos:

  • Pontos positivos: Dinâmico, Bem Aplicado, Período Favorável, Caso de Estudo Real, Introdução às Ferramentas e Instrução dos Professores
  • Pontos negativos: Tempo Curto, Tempo para Práticas
  • Necessidades no Curso: Mais Tempo para Práticas
  • Nota Geral de 1 a 5: 4,5
  • Nota Sobre 2 Professores em 1 único Curso de 1 a 5: 5

Considerações da Bit Zero: Por ser um curso de férias, o tempo curto já estava previsto. Mas pensamos em uma maneira para amortecer este impacto, elaborando um material de acompanhamento por aula, permitindo o aluno revisar quando quiser os assuntos abordados aula-a-aula. Falha nossa.

Para nosso primeiro curso com um feedback tão bom, decidimos criar nosso próximo curso e aproveitamos também para divulgar: Programando com LINQ. Será realizado em Janeiro. Mais detalhes em breve no site oficial.

Sorteamos também o livro para treinamento para certificação Microsoft entre os presentes no último dia, onde o contemplado foi Thiago (primeiro de costas na última foto com um moicano), parabens!

É interessante dizer também que a Bit Zero está criando modalidades específicas para Cursos de Férias, ou seja, seremos sim focados a princípio em Cursos de Férias.

Deixamos um muito obrigado para os alunos que responderam pacientemente os questionários. Sabemos que é chato, mas vai nos ajudar a criar melhores oportunidades para os estudantes e futuros profissionais do mercado através de novos cursos e principalmente aprimorar constantemente o modelo de aulas.

PS 1: Fizemos uma pesquisa no primeiro dia de aula e descobrimos que um dos alunos achou o curso pelo Google!!

PS 2: Como diria o Azaghal: Chupa essa Entidade cujo nome não irei dizer!

[Versão Editada]

1 Comentário

Curso de Férias em ASP.NET (Inscrições Reabertas)

Visto a demanda e requisições para o curso de Férias divulgado neste post, resolvemos (eu e Iury) extender o período de inscrições.

curso

As incrições estarão abertas até o dia 14 de Dezembro de 2009. FAÇA AGORA!!!

1 Comentário

Microsoft WebsiteSpark

Assim como o DreamSpark, voltado para estudantes, a Microsoft lançou um serviço para pequenas empresas que desenvolvem para a Web com ferramentas da Microsoft, é o WebsiteSpark.

O WebsiteSpark vai distribuir os seguintes aplicativos para as empresas sem custo algum:

  • Expression Studio 2 ou 3.
  • Expression Web 2 ou 3.
  • SQL Server 2008.
  • Visual Studio 2008.
  • Windows Server 2008.

tela

Clique na imagem acima para acessar a página oficial!

Nenhum comentário.

ASP.NET: GridView DataFormatString

Como tem um tempinho que não programo para ASP.NET e ultimamente eu comecei a desenvolver um pequeno projeto, tive que lembrar como diabos formatar os dados que aparecem no GridView. Depois de consultar a documentação, aqui vão alguns modelos para auxiliar quem quer que necessite do recurso:

  1. {0:C} Currency Format (Moeda)
  2. {0:D} Decimal Format
  3. {0:E} Exponencial Format
  4. {0:F} Fixed Format
  5. {0:G} General Format
  6. {0:N} Number Format
  7. {0:X} Hexadecimal Format

Agora vamos a alguns exemplos práticos mais utilizados:

  • Formatar um número decimal para um formato em Moeda:

Número: 1,979. Aplicando {0:C}, temos R$ 1,98

  • Formatar uma número decimal para um formato com duas casas decimais:

Número: 10,154809. Aplicando {0:N2}, temos 10,15

  • Formatar um número inteiro para um formado com 5 casas completadas com zero:

Número: 12. Aplicando {0:00000}, temos 00012

  • Formatar um DateTime no formato dd/MM/yyyy:

Data: 2009-11-16 00:00:00.000, Aplicando {0:dd/MM/yyyy}, temos 16/11/2009

É bem tranquilo não é? A documentação completa você encontra aqui.

1 Comentário

Cursos Bit Zero

Hoje, a Bit Zero está iniciando um projeto de cursos presenciais em belo horizonte, abordando temas relacionados à área de desenvolvimento de sistemas.

banner

Para mais detalhes sobre o curso, clique aqui.

As inscrições estarão abertas até 27/11/2009 ou enquanto houver vagas, por aqui.

3 Comentários

LINQ To SQL e ForeignKeyReferenceAlreadyHasValueException

1Em um último momento, antes de apresentar meu PFC, venho me deparado continuamente com a exceção: ForeignKeyReferenceAlreadyHasValueException – E eu não estava conseguindo resolver, inclusive muito preocupado pois é de vital importância o sistema não disparar esta exceção devido ao momento em que foi disparado:

ALTERAR O VALOR DE UMA FK DE UM DETERMINADO OBJETO.

Eu obviamente persisti no desenvolvimento de outras funcionalidades do sistema e ignorava determinadas partes deste quando a falha era encontrada. Já dizia um velho sábio: “Sem sacrifício, não á vitória”, ou seja, continuei persistindo.

Não sei se muitas pessoas sofrem deste mesmo mal: acostumado a trabalhar demais com o modelo de banco de dados relacional – Mas agora é uma ótimo momento de concertar.

A solução é tão banal (ao mesmo tempo que genial), que já tenho meu dia salvo antes mesmo de fazer a apresentação para a banca do PFC.

Eu estava fazendo assim:

[ObjetoAtual].MinhaFK = NovaFK;

O correto é:

[ObjetoAtual].ReferenciaObjetoFK = NovoObjetoFK;

MORAL: Você altera a referência da FK de seu objeto para o objeto correspondente à nova FK.

2 Comentários

Business Objects + Linq To SQL

Recentemente publiquei um artigo no DevMedia sobre o assunto intitulado neste post.

http://www.devmedia.com.br/articles/viewcomp.asp?comp=12171&fb=1

Se acharem o artigo útil e bom, cadastrem-se e votem!

Nenhum comentário.

Gerando Gráficos com XtraChart (Developer Express) + Linq To SQL

Nos últimos dias estive pesquisando também o componente de gráficos gerenciais da biblioteca de componentes Developer Express (Esta versão é a 7.2, mas serve para as versões mais atuais também).

Veja o DER utilizado para um exercício de medir audiência de canais:

1

Depois de criar o banco de dados no SQL Server (chamei de Audiencia), me ocupei em inserir dados nas tabelas para geração dos gráficos.

Criei um novo projeto WindowsForm (também chamei de Audiencia), em seguida, um arquivo Linq to SQL, mapeando todas as minhas tabelas.

Criei também um arquivo com nome de GDS.cs, contendo o seguinte código:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Audiencia
{
  public static class GDS
  {
    private static AudienciaDataContext _db = null;
    public static AudienciaDataContext DB
    {
      get
      {
        if (GDS._db == null)
          GDS._db = new AudienciaDataContext();

        return GDS._db;
      }
    }
  }
}

Este código possui o objetivo de encapsular uma única conexão com o banco de dados durante a vida da aplicação. Em se tratando de WindowsForm, ou seja, Clientes Gordos, é uma ótima estratégia. Feito isto, arrastei para meu form o componente XtraChart da Developer Express, ignorando os assistentes automáticos que se abrem ao instanciá-los no formulário, pois vamos fazer a ligação com os dados via código C#.

O gráfico que pretendo mostrar é o gráfico de barras empilhadas, onde cada barra empilhada terá uma cor diferente e representará cada Canal da minha base. Estas barras estarão posicionadas sob uma base de Estados Civis, e a altura de cada barra representará o nível de audiência de cada canal por estado civil.

Antes de fazer isto, espero que tenham o conhecimento necessário sobre Linq To SQL, pois as classes geradas por este novo recurso possuem o modificador “partial”, o que nos permite trabalhar com a idéia de Business Objects. Com isto, criei uma nova classe com o mesmo nome da classe gerada para a tabela CanalTelespectador (afinal, ela é a tabela que possui os nossos dados).

Nesta nova classe, codifiquei o seguinte:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; 

namespace Audiencia
{
  public partial class CanalTelespectador
  {
    public static int GetAudiencia(Canal c, EstadoCivil ec)
    {
      int count = (from ct in GDS.DB.CanalTelespectadors
                   where ct.Canal.Id == c.Id && ct.Telespectador.IdEstadoCivil == ec.Id
                   select ct).Count();

      return count;
    }
  }
}

É importante saber também como funcionam os gráficos deste componente. Nele, a base para a criação é a organização das séries, objetos que representam o principal item à ser analisado.

Já no código do formulário, no evento Load do Form, coloquei o seguinte código:

foreach (Canal c in GDS.DB.Canals)
{
  Series serie = new Series(c.Nome, ViewType.StackedBar);

  foreach (EstadoCivil ec in GDS.DB.EstadoCivils)
    serie.Points.Add(new SeriesPoint(ec.Nome, new double[] { CanalTelespectador.GetAudiencia(c, ec) }));

  this.chartControl.Series.Add(serie);
}

O resultado:

2

Se fizer isto e funcionar perfeitamente, para fazer outros tipos de gráfico, basta estudar na Documentação dos componentes da Developer Express.

Dica: Ao criar um objeto do tipo Serie, experimente mudar o seguinte:

Series serie = new Series(c.Nome, ViewType.Bar);

O resultado:

3

Além de mudar o ViewType, é importante entender o comportamento de cada tipo de gráfico antes de simplesmente mudar o valor deste parâmetro. Qualquer dúvida, pode entrar em contato.

Nenhum comentário.

Traduzindo o XtraGrid (Developer Express)

Muitas pessoas já me perguntaram como traduzir o Grid (Windows Form) do pacote de componentes da Developer Express. Segue a solução:

Crie um arquivo chamado “BrazilianPortugueseGridLocalizer.cs” Com o seguinte código:

using System;
using System.Text;
using DevExpress.XtraGrid.Localization;

namespace [COLOQUE AQUI O SEU NAMESPACE]
{
  public class BrazilianPortugueseGridLocalizer : GridLocalizer
  {
    public override string Language { get { return "Português"; } }
    public override string GetLocalizedString(GridStringId id)
    {
      string ret = "";
      switch (id)
      {
        case GridStringId.FilterBuilderApplyButton: return "Aplicar";
        case GridStringId.FilterBuilderCancelButton: return "Cancelar";
        case GridStringId.FilterBuilderOkButton: return "Ok";
        case GridStringId.FilterBuilderCaption: return "Construtor de Filtros";
        case GridStringId.GridGroupPanelText: return "Arraste o cabeçalho de algum campo aqui para agrupar";
        case GridStringId.PopupFilterBlanks: return "(Vazios)";
        case GridStringId.PopupFilterCustom: return "(Costumização)";
        case GridStringId.PopupFilterNonBlanks: return "(Não Vazios)";
        case GridStringId.PopupFilterAll: return "(Todos)";
        case GridStringId.CustomFilterDialog2FieldCheck: return "aaa";
        case GridStringId.CustomFilterDialogCaption: return "Mostrar Linhas Onde:";
        case GridStringId.CustomFilterDialogClearFilter: return "Limpar Filtro";
        case GridStringId.CustomFilterDialogConditionEQU: return "é igual a";
        case GridStringId.CustomFilterDialogConditionNEQ: return "é diferente de";
        case GridStringId.CustomFilterDialogConditionGT: return "é maior que";
        case GridStringId.CustomFilterDialogConditionGTE: return "é maior ou igual a";
        case GridStringId.CustomFilterDialogConditionLT: return "é menor que";
        case GridStringId.CustomFilterDialogConditionLTE: return "é menor ou igual a";
        case GridStringId.CustomFilterDialogConditionBlanks: return "vazio";
        case GridStringId.CustomFilterDialogConditionNonBlanks: return "não vazio";
        case GridStringId.CustomFilterDialogConditionLike: return "contém";
        case GridStringId.CustomFilterDialogConditionNotLike: return "não contém";
        case GridStringId.CustomFilterDialogOkButton: return "Ok";
        case GridStringId.CustomFilterDialogCancelButton: return "Cancelar";
        case GridStringId.CustomFilterDialogRadioAnd: return "E";
        case GridStringId.CustomFilterDialogRadioOr: return "Ou";
        case GridStringId.MenuGroupPanelFullExpand: return "Expandir Todos";
        case GridStringId.MenuGroupPanelFullCollapse: return "Recolher Todos"; case GridStringId.MenuGroupPanelClearGrouping: return "Remover agrupamento";
        case GridStringId.MenuColumnSortAscending: return "Classificar (Crescente)";
        case GridStringId.MenuColumnSortDescending: return "Classificar (Descrescente)";
        case GridStringId.MenuColumnClearSorting: return "Remover classificação";
        case GridStringId.MenuColumnGroup: return "Agrupar por este campo";
        case GridStringId.MenuColumnGroupBox: return "Painel de agrupamentos";
        case GridStringId.MenuColumnColumnCustomization: return "Seletor de campos";
        case GridStringId.MenuColumnBestFit: return "Melhor ajuste";
        case GridStringId.MenuColumnClearFilter: return "Remover filtro";
        case GridStringId.MenuColumnBestFitAllColumns: return "Melhor ajuste (Todas as colunas)";
        // ...
        default: ret = ""; break;
      }

      return ret;
    }
  }
}

Agora, no evento Load do formulário em que se encontra o Grid, execute a seguinte linha de comando:

DevExpress.XtraGrid.Localization.GridLocalizer.Active = new [COLOQUE AQUI O SEU NAMESPACE].BrazilianPortugueseGridLocalizer();

DICA: Normalmente, eu tento criar um novo componente, herdando do Grid do Dev Express, encapsulando esta operação em seu construtor.

Nenhum comentário.

GFP – Mini projeto C# com db4o

Já faz mais de 1 ano que eu e meus colegas de turma na faculdade apresentamos um trabalho para a matéria de Banco de Dados 2. Nosso tema era Bancos de Dados Orientados a Objetos. Como não poderia deixar de ser, sugeri a idéia de um exemplo em db4o.

Fizemos uma pesquisa histórica sobre o uso e a evolução dos DBOO no mercado e no final, mostramos um pouco sobre o db4o e um exemplo que eu fiz, o GFP (Gerenciador Financeiro Pessoal).

Nele é possível fazer a gerencia de gastos pessoais. Lançamentos básicos, com categorias e agendamentos, além de relatórios por período e suas respectivas categorias.

O código fonte está neste link. Não fiz mais implementações, mas se um dia alguém quiser fazer algo, fiquem a vontade.

1

Detalhe para o código. Não foi feito das melhores maneiras de se desenvolver com db4o, justamente por que se tratava de um trabalho acadêmico, mas está bem organizado, coerente e fácil de estudar/melhorar.

Nenhum comentário.