2010-02-15 28 views
1

Avec NetVantage Windows Forms 9.1 UltraGrid, je souhaite ajouter des colonnes non liées pour effectuer des calculs simples. La première fois que ce code est entré dans le délégué InitializeLayout, il constate que les colonnes n'existent pas encore et les ajoute ensuite. Étonnamment, quand j'obtiens de nouvelles données, relancez la grille, puis entrez à nouveau ce délégué, il trouve toujours que ces colonnes n'existent pas et essaie ensuite de les ajouter. Une exception est alors lancée: "La clé existe déjà".Comment ajouter des colonnes non liées à Infragistics UltraGrid une seule fois sans lancer d'exception?

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])"; 

Répondre

6

Ceci était un RTFM. Je aurais dû appeler une autre méthode:

changement

if (e.Layout.Bands[0].Columns.Contains("Change")) 

à

if (e.Layout.Bands[0].Columns.Exists("Change")) 

Le problème est Contient vérifie ici un objet, pas une clé. Je vérifiais pour voir si les collections de colonnes contenaient un objet chaîne. Existe renvoie la valeur true d'un objet avec cette clé dans la collection.