Assim como o windows, o Visual Studio também possui um pacote de “utilitarios/ferramentas”, os powertoys, alguns são inuteis mas outros são bem interessantes.

VSCMD Shell Window

Custom Help Builder

VSEdit

VSTweak

VS Mouse Bindings

Control Outline

VS Window Manager

VBCommenter

Antes tinha postado um post sobre o ReSharper 4.0 Beta, já faz algum tempo que saiu a versão final e aqui está:

http://rs320.rapidshare.com/files/121995987/JetBrains.Resharper_for_VS2008_v4.0-EMBRACE.rar

Como concatenar valores nulos? Quando você tentar concatenar dois valores e um deles é nulo, a resposta será nulo. Porém tem um jeito de fazer isso funcionar basta usar o isnull ou coalesce.


DECLARE @var1 VARCHAR(50)
DECLARE @var2 VARCHAR(50)
SELECT @var1 ='Test'
SELECT @var1 + @var2 -- NULL

O output será Null, então fazemos:


DECLARE @var1 VARCHAR(50)
DECLARE @var2 VARCHAR(50)
SELECT @var1 ='Test'
SELECT @var1 + ISNULL(@var2,'' )
SELECT @var1 + COALESCE(@var2,'' )

No SQL Server basta apenas executar esse comando.


SELECT tc.TABLE_NAME AS PrimaryKeyTable, tc.CONSTRAINT_NAME AS PrimaryKey,
           COALESCE(rc1.CONSTRAINT_NAME, 'N/A' ) AS ForeignKey ,
           COALESCE(tc2.TABLE_NAME, 'N/A' ) AS ForeignKeyTable FROM
           INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc LEFT JOIN
           INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc1 ON
           tc.CONSTRAINT_NAME = rc1.UNIQUE_CONSTRAINT_NAME LEFT JOIN
           INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc2 ON
           tc2.CONSTRAINT_NAME = rc1.CONSTRAINT_NAME
           WHERE TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
           ORDER BY tc.TABLE_NAME,tc.CONSTRAINT_NAME,rc1.CONSTRAINT_NAME

O pessoal da Giva Labs fez uma combo box hierarquica com ajuda do JQuery, quem quiser conferir, tem o link do download e um demo nessa página: http://www.givainc.com/labs/mcdropdown. Vale a pena

Acabei de ler em um blog um post que me agradou muito, mostrando alguns dos novos recursos do sql server 2008 e cada um é melhor que o outro, teremos até intellisense!

Confira: http://angryhacker.com/blog/archive/2008/06/20/10-reasons-why-sql-server-2008-is-going-to-rock.aspx

Existem duas formas de realizar um cast em C#:

Prefix-casting:

SuperClasse a;
SubClasse b = (SubClasse) a;

ou

SuperClasse a;
SubClasse b = a as SubClasse;

Em geral, usamos uma forma ou outra por apenas costume, programadores que vieram do java tem o costume de usar o prefix-casting e programadores que vieram do VB usam o as-casting, porém existem diferenças entre os dois tipos de casting que é importante estar atento.

A principal diferença entre um e outro é o que acontece quando o cast falha. Imagine, por exemplo que a SubClasse não faz herança com a SuperClasse, nesse caso o prefix-cast dispara uma exceção, entretanto o as-cast apenas retorna null quando o cast falha, deixando a execução prosseguir.

Logo é mais fácil tratar o erro em programas que usam o prefix-casting e tornando-os mais simples de debugar, pois o prefix-cast dispara a exceção no momento que o problema é mais óbvio. O as-casting só disparará a exceção quando alguem tentar acessar um membro do mesmo, assim disparando uma null pointer exception.

Se é dificil o tratamento de erros com as-casting, porque as pessoas usam? Apenas por um pequeno mas importante detalhe, o as-casting chega a ser 5x mais rápido que o prefix-casting. Confira você mesmo nesse artigo: http://www.codeproject.com/KB/cs/csharpcasts.aspx

Uma dica do uso do Visual Studio, ele permite seleção retangular do código, basta segurar a tecla ALT, muito útil para retirar um bloco de código ou apenas arrumar a indentação.

Mais um gerador de botões online no estilo web 2.0, confira um exemplo abaixo:

Página Oficial: http://jirox.net/AsButtonGen/

Quando estamos usando o footer da gridview como meio para inserir novos registros na gridview ficamos com um problema quando a lista está vazia, pois desse jeito a gridview não é exibida e logo não tem como fazer a inserção. Estou mostrando uma pequena solução para resolver esse problema, não é das mais bonitas, mas é bem simples e pelo o que andei pesquisando essa solução e a outra de extender a classe gridview são as mais usadas, sendo que a segunda requer um pouco mais de trabalho.


// A lista está vazia
            if (vetProduto.Count == 0)
            {
// Instancio uma nova lista do mesmo tipo do objeto presente na gridview
                List<Produto> ls = new List<Produto>();
// Instancio e adiciono na lista um produto
                ls.Add(new Produto());
// Faço o bindign
                grid.DataSource = ls;
                grid.DataBind();
// Obter o número de celulas da gridview
                int columnSpan = grid.Rows[0].Cells.Count;
// Apaga todo o conteudo da primeira linha
                grid.Rows[0].Cells.Clear();
// Adiciona uma nova celula
                grid.Rows[0].Cells.Add(new TableCell());
// Faz o conteudo da celula ficar centralizado
                grid.Rows[0].Attributes.CssStyle.Add("text-align", "center");
// Adiciona uma frase informativa
                grid.Rows[0].Cells[0].Text = "Não existe nenhum produto cadastrado.";
// Coloca a celula para ocupar todo o espaço da tabela
                grid.Rows[0].Cells[0].ColumnSpan = columnSpan;
            }
            else
            {
// A lista nao estava vazia, logo trata normalmente
                grid.DataSource = vetProduto;
                grid.DataBind();
            }

Next Page »