2017-10-09 1 views
0

J'ai rencontré ce problème en définissant une valeur de cellule basée sur la valeur de la ligne suivante.Comment définir la valeur de la ligne actuelle en fonction des données de la ligne suivante dans un datagridview à l'aide de vb.net

Par exemple;

Remarks Reference 
    A   50 
    A   25 
    B   5 
       -25 

CASE 1:

Si la valeur de la prochaine Cell.Row dans la colonne « Référence » est un nombre positif, la valeur de cell.row dans la colonne « Remarques » est « A ».

CASE 2:

Si la valeur de la Cell.Row suivante dans la colonne « Référence » est un nombre NÉGATIVE alors la valeur de cell.row dans la colonne « Remarques » est « B ».

J'ai déjà essayé ce code mais je n'arrive pas à obtenir le résultat dont j'ai besoin.

Dim Bal As Decimal = 0 
    For Each r As DataGridViewRow In dgvSTSub.Rows 
     Bal = Bal + r.Cells(3).Value - r.Cells(1).Value 
     r.Cells(3).Value = Bal 

     If Bal > 0 Then 
      r.Cells(2).Value = Bal 
     ElseIf Bal < 0 Then 
      r.Cells(2).Value = r.Cells(3).Value 
     End If 
    Next 

S'il vous plaît partagez-moi un code sur la façon de le faire.

+0

Utilisez la boucle 'for' au lieu de' foreach'. En outre, accédez aux valeurs de cellule basées sur 'noms de colonne', au lieu de leur index. Selon ma compréhension de votre question, vous voulez manipuler la ligne courante en fonction des valeurs de la ligne suivante, n'est-ce pas? –

+0

J'ai abordé cette même question ailleurs et cela semble avoir été ignoré. S'il vous plaît, n'ignorez pas celui-ci aussi. Utilisez une boucle 'For' au lieu d'une boucle' For For', auquel cas l'accès et la ligne adjacente consistent simplement à incrémenter ou décrémenter le compteur de boucle, ou à obtenir la propriété 'Index' de la ligne courante et à faire le pareil pour ça. La première option est meilleure parce que vous pouvez facilement commencer avec la deuxième rangée ou finir avec la deuxième dernière rangée. – jmcilhinney

+0

Je suis désolé si j'ai ignoré votre suggestion il ya quelque temps, je suis juste nouveau dans vb.net .. En fait, j'ai répondu plus tôt pour me partager du code parce que je ne sais pas comment le faire. Je ne peux pas comprendre la logique. mes excuses bro. Merci pour l'aide. – Diaval

Répondre

1

Tout d'abord, je recommande d'utiliser la boucle For au lieu de ForEach parce que l'itération sur les lignes devient plus pratique et plus facile.

En second lieu, utiliser ColumnNames au lieu de Index lors de l'accès .Cells, par exemple: utiliser .Cells("reference") (référence est le nom de la colonne) au lieu de .Cells(1). Je suggère ceci parce que si à l'avenir vous réorganisez les colonnes vos méthodes et fonctions ne seront pas gênées, sauf si vous changez le nom de votre colonne.
Remarque: ColumnName n'est pas le texte d'en-tête affiché dans l'interface utilisateur DataGridView. (Espérons que vous savez déjà que)

Comme vous ne l'avez pas montré où vous définissez des remarques, ce qui devrait vous faire une idée comment y parvenir:

For index = 0 To DataGridView1.RowCount - 1 
    Dim nxt = 1 
    If (index + 1 < DataGridView1.RowCount) Then 
     nxt = DataGridView1.Rows(index + 1).Cells("reference").Value 
    End If 
    If (nxt) > 0 Then 
     DataGridView1.Rows(index).Cells("remark").Value = "A" 
    Else 
     DataGridView1.Rows(index).Cells("remark").Value = "B" 
    End If 
Next 

Sortie factice:

Remark Reference 

A  13 
B  21 
A  -33 
B  41 
A  -54 
+0

Ow oui! c'est de ça que je parle .. !!!!! Vous êtes un angle bro .. .. THank vous ... simple comme ça .. Merci beaucoup .. – Diaval