2010-01-16 4 views
0

J'ai rencontré un comportement un peu étrange que je ne pouvais pas comprendre Je me demande si quelqu'un peut m'aider à le comprendre.
La méthode follwing recives un tableau d'objets et de faire quelques changements dans les membres du groupechanger les valeurs du tableau dans la méthode

public static void adjustRow(object[] row, String column) 
     { 

      Double price ,units ,invest; 
      if (!(Double.TryParse(row[3].ToString(),out price) 
       & Double.TryParse(row[4].ToString(),out units) 
       & Double.TryParse(row[5].ToString(),out invest))) 
       return ; 
      switch (column) 
      { 
       case INVEST: row[4] = Math.Round(invest/price,2); break; 
       case UNITS: 
       case PRICE: row[5] = Math.Round(units * price,2); break; 
      } 
     } 

la méthode follwing appel à la méthode ci-dessus:

void editGrids_CellValueChanged(object sender, DataGridViewCellEventArgs e) 
    { 

     DataGridView gridView = sender as DataGridView; 
     DataTable source= null; 
     if (gridView != null)source = gridView.DataSource as DataTable; 
     if (source != null) 
      Systm.adjustRow(source.Rows[e.RowIndex].ItemArray,gridView.Columns [e.ColumnIndex].HeaderText); 
    } 

Je pensais que les valeurs du tableau d'entrée seront changé en dehors de la portée de la première méthode, mais le résultat est que les valeurs restent les mêmes explication?
Merci Eran

Répondre

1

Vous devez passer tableau par référence, et non par la valeur

http://msdn.microsoft.com/en-us/library/0f66670z%28VS.71%29.aspx

+1

pouvez-vous s'il vous plaît expliquer pourquoi ?? Le tableau n'a-t-il pas la valeur de la valeur qu'il y conserve? le comportement que j'ai décrit ne correspond pas à l'exemple 4 dans votre lien et que le conflit je ne comprends pas – Eran

+2

Sauf si quelque chose me manque, le lien que vous avez donné indique que le code d'Eran * devrait * changer le tableau. – sepp2k

5

toute explication

Bien sûr, je peux penser à beaucoup d'explications.

1) gridView est null.

2) gridView.DataSource est pas un DataTable

3) L'un des appels à TryParse retourne faux. (Remarque: vous avez probablement voulu dire utiliser & &, pas &.)

4) La colonne ne correspond pas INVEST, unités ou PRIX.

5) La valeur écrite dans le tableau est la même que celle qui s'y trouvait déjà.

Tout ce qui précède pourrait expliquer votre observation.

+0

Je peux voir les changements dans la première méthode mais ils ne sont pas reflétés en dehors de la portée de la méthode ... – Eran

+0

Comment voyez-vous les changements dans la première méthode? Comment ne se reflètent-ils pas en dehors de la méthode? –

+0

J'ai ajouté un point breack dans la première méthode et j'ai vu que les valeurs sont changées comme prévu dans la portée de la méthode, j'essaye même de retourner le tableau et le tableau retourné était correct mais je ne peux pas le comprendre. devrait de toute façon refelct à l'extérieur de la méthode – Eran

Questions connexes