2010-05-27 7 views
1

J'ai quelques colonnes dans mon DataGridView, l'une d'entre elles est une colonne non liée et le DataGridVIew est en mode virtuel.Comment calculer la valeur de la colonne non liée en fonction de la valeur de la colonne liée dans DatagGridView?

Lorsque l'événement CellValueNeeded est appelé, je veux calculer la valeur de Cells[0] basant sur la valeur de Cells[2] qui est dans la colonne bornée au DataSource underlaying.

Voilà comment j'essaie de le faire:

private void dgvItems_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e) 
{ 
    e.Value = dgvItems.CurrentRow.Cells[2].Value * 5; //simplified example 
} 

Cependant, je reçois System.StackOverflowException parce qu'il coud cet appel à dgvItems.CurrentRow.Cells[2].Value résultats en appel à un autre événement CellValueNeeded. Et ainsi de suite et ainsi de suite ... Cependant Cells [2] n'est pas une colonne non liée, donc sur le bon sens il ne devrait pas aboutir à un appel récursif à moins d'obtenir la valeur de n'importe quelle colonne (liée ou non liée) ...

Je ne peux pas utiliser ici SQL Expression et je ne peux pas précalculer e.Value dans un appel SQL. Dans l'exemple réel Cells [2] .Value est une clé utilisée dans HashTable qui retournera une valeur correcte pour les cellules [0] (e.Value).

Que puis-je faire?

Répondre

0

Vous devez être sélectif et agir sur la colonne 0 seulement:

//untested 
private void dgvItems_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e) 
{ 
    if (e.Column == 0) 
    { 
    e.Value = dgvItems.CurrentRow.Cells[2].Value * 5; //simplified example 
    } 
} 
Questions connexes