Arquivo da categoria: .NET

Dicas, exemplos de código, soluções e opniões sobre a plataforma de desenvolvimento da Microsoft

.NET – Corrigindo o erro DataGridViewComboBoxCell Value is not Valid

Se você ainda não esbarrou com este erro, está com sorte.

Quando acontece, é sempre no fechamento do formulário, sendo apresentado inúmeras vezes.

O erro apenas acontece se o autosizemode de uma coluna do tipo datagridviewcombobox estiver definido. Se o autosizemode não for definido, o erro não acontece.

Isso nos leva a duas situações :

O erro pode acontecer quando o autosizemode está definido a nível da DataGridView e existe uma coluna do tipo ComboBox na GridView

O erro pode acontecer quando o autosizemode está definido a nível de coluna e foi definido na coluna do tipo ComboBox

O erro ocorre porque no momento do fechamento do formulário, o formulário realiza primeiramente o dispose do datasource da coluna ComboBox. Quando o datasource é destruido e o autosize está definido, a ComboBox precisa recalcular o seu tamanho, então faz uma requisição por dados que não estão mais lá

Sem dúvida que desligar o autoSizeMode é uma solução, mas não desejamos isso, precisamos do autoSize

No momento em que o formulário for fazer o dispose do datasource da comboboxColumn, a ComboBoxColumn precisa estar com o autosizemode definido como None

Lembre-se que o autosizemode pode ser também definido no nível da grid, dai a diferença entre definir o autoSizeMode como None ou como NotSet

Então no evento form_Closed podemos simplesmente alterar o autosizemode da comboboxcolumn e com isso passaremos a poder utilizar o autoSize enquanto que o erro desaparecerá.

Lembre-se que cada coluna da DataGridView possui um nome e é uma variável acessível por código. Veja como fica :

NomeDaSuaColuna.AutoSizeMode =DataGridViewAutoSizeColumnMode.None;

Fonte: www.bufaloinfo.com.br

Abraços

Tomás Vásquez
www.tomasvasquez.com.br

C# – Preenchendo um dropdownlist com os valores de um Enum

A estrutura Enum é um recurso muito poderoso das linguagens de programação mais atuais, permitindo a criação do que gosto de chamar de “flags inteligentes”, que auxiliam tanto na visualização do código como na verficação de erros, muitas vezes em tempo de compilação.

O mais comum é utilizar Enums para facilitar a vida do próprio desenvolvedor. Porém, algumas vezes torna-se necessário fazer uma representação dos valores deste Enum na interface, mais comumente em um DropDownList.

Vamos supor então que tenhamos um Enum parecido com este:

1
2
3
4
5
6
7
public enum StatusDaProposta
{
  Aberta = 1,
  Inativa = 2,
  Pendente = 3,
  Cancelada = 4
}

Para colocar seus valores em um DropDownlist, ou qualquer controle que suporte a propriedade DataSource, basta usar a rotina abaixo, supondo que estamos um aplicativo ASP.NET:

1
2
3
4
5
if (!Page.IsPostBack)
{
  StatusDropDownList.DataSource = Enum.GetNames(typeof(StatusDaProposta));
  StatusDropDownList.DataBind();
}

O método GetNames da classe Enum retorna um array de strings com os valores de texto utilizados no Enum informado como parâmetro.

Isso já é suficiente para que os valores sejam mostrados no DropDownList. Para recuperar o valor do enum referente ao item selecionado, é preciso refazer a conversão do valor. O método Parse da classe Enum faz o trabalho, convertendo a string para seu valor numérico equivalente ao Enum passado também por parâmetro. Para isso, use o código abaixo:

1
2
3
4
5
6
protected void Button1_Click(object sender, EventArgs e)
{
  StatusDaProposta meuStatus = (StatusDaProposta)Enum.Parse(
    typeof(StatusDaProposta), StatusDropDownList.SelectedValue);
  Label1.Text = meuStatus.ToString();
}

Isso já facilita bantante o trabalho, evitando reescrita de código e também evitando criar estes valores em arquivos separados ou mesmo no banco de dados.

Para saber mais:

http://msdn.microsoft.com/en-us/library/sbbt4032(VS.80).aspx

Fonte: http://aspalliance.com/

Abraços

Tomás Vásquez
www.tomasvasquez.com.br

Utilizando o Copy Source as HTML no Visual Studio 2008

Por Dennes Torres do BufaloInfo

O CSAH é uma ferramenta indispensável para qualquer um que codifique e publique código em blog, artigos e outros meios mais. Ele permite fazer um copy/past direto do Visual Studio para uma página HTML levando toda a formatação tradicional do visual studio e eventualmente bem mais.

Porém não foi lançada uma versão do CSAH para o Visual Studio 2008, apenas para o Visual Studio 2005.

Mas usar o CSAH atual no Visual Studio 2008 é muito simples :

  1. Copie os arquivos que você irá encontrar em My Documents\Visual Studio 2005\AddIns
    CopySourceAsHtml.dll
    CopySourceAsHtml.AddIn
    CopySourceAsHtml.dll.config
  2. Cole esses arquivos em My Documents\Visual Studio 2008\AddIns
  3. Abra o arquivo CopySourceAsHtml.AddIn no notepad
  4. Altere a tag <Version> que aparece como 8.0 para 9.0
  5. Já dentro do Visual Studio 2008, vá em tools->Addins Manager e habilite o CSAH
  6. Reinicie o Visual Studio

Pronto, só utilizar !

Tomás Vásquez
www.tomasvasquez.com.br

O Word é uma carroça…. mas cada um no seu lugar

Meu, fiquei chateado, mas não dá para abraçar o mundo certo?

Todo mundo sempre falou de Crystal Reports, Active Reports, Reporting Services, blabla Reports, enfim. Nunca me acostumei com essas ferramentas, e como tinha experiência no Office, sempre que me pediam um relatório, fazia com que o dito fosse gerado no Word ou no Excel, seja via Interop ou o que quer que fosse. Todos adoravam a idéia pois tinham a oportunidade de customizar seus relatórios com formatação e tudo mais. Lindo!

Qual o problema então? Desempenho!

Tentei gerar um relatório simples no Word que lista 500 registros de uma tabela, e o dito demorou 10 minutos para ser gerado! Fiz de tudo! Usei ADO tradicional, troquei o Dataset por Datareader, desativei o ScreenUpdating, enfim, nada. A mesma demora de sempre. A alternativa foi o Excel com o famoso CopyFromRecordset, já comentado neste humilde blog.

O duro foi ter colocado tanta esperança na ferramenta perante os clientes. Não vou condenar de vez o coitado do Word. Vou fazer uns testes com XML gerado no padrão Word, que claro, só poderá ser aberto no Word 2003.

Fica aí para a comunidade.

Abraços

Tomás Vásquez
http://www.tomasvasquez.com.br

Republicação de post. Originalmente publicado no blog theSpoke.net.