Como adiciono colunas não ligadas a um UltraGrid apenas uma vez sem jogar uma exceção?
-
20-09-2019 - |
Pergunta
Com o Netvantage Windows Forms 9.1 UltraGrid, quero adicionar algumas colunas não ligadas para fazer alguns cálculos simples. Na primeira vez em que este código é inserido no delegado inicializeLayout, descobre que as colunas ainda não existem e depois as adicionam. Surpreendentemente, quando recebo novos dados, rebento a grade e, em seguida, digito esse delegado novamente, ainda descobre que essas colunas não existem e depois tenta adicioná -las. Uma exceção é então lançada: "Key já existe".
UltraGridColumn ChanGecolumn, PCTCHGCOL;
if (e.Layout.Bands[0].Columns.Contains("Change"))
{
changeColumn = e.Layout.Bands[0].Columns["Change"];
pctChgCol = e.Layout.Bands[0].Columns["Percent Change"];
}
else
{
changeColumn = e.Layout.Bands[0].Columns.Add("Change");
pctChgCol = e.Layout.Bands[0].Columns.Add("Percent Change");
}
changeColumn.Formula = "[Publish Price] - [Override Price]";
pctChgCol.Formula = "if(0=[Publish Price] , 0 , ([Publish Price] - [Override Price])/[Publish Price] )";
Solução
Este foi um RTFM. Eu deveria ter chamado de método diferente:
Mudar
if (e.Layout.Bands[0].Columns.Contains("Change"))
para
if (e.Layout.Bands[0].Columns.Exists("Change"))
O problema aqui é Contém Verifica um objeto, não uma chave. Eu estava verificando se as coleções de colunas contêm um objeto de string. Existe Retorna verdadeira de um objeto com essa chave está na coleção.