comment obtenir la somme dynamiquement de datagridview colonne dans la zone de texte
Je veux obtenir la somme d'une colonne de datagridview et de montrer que, dans la zone de texte. Après chaque entrée de la somme doit être modifiés dynamiquement. Pour cela, je suis en utilisant événement textChanged d'une zone de texte, mais lorsque l'entrée est effectué, il ne montre pas de résultat. Je veux obtenir le résultat de façon dynamique dans la zone de texte. Je veux éviter l'utilisation du bouton somme.
Voici un morceau de code pour la zone de texte événement textChanged:
private void textBox9_TextChanged(object sender, EventArgs e)
{
double sum = 0;
for (int i = 0; i < dataGridView2.Rows.Count; ++i)
{
sum += Convert.ToDouble(dataGridView2.Rows[i].Cells[5].Value);
}
textBox9.Text = sum.ToString();
}
Si vous souhaitez mettre à jour la valeur dans la
Lorsque vous voulez le mettre à jour dans la zone de texte?
je veux que textBox9 calcule la somme automatiquement pour n'importe combien de lignes sont là, dans le Datagridview...
supposons que je veuille prendre la somme du premier coulmn...quand j'ajoute de la valeur=2 dans coulmn textBox9 obtient 2 automatiquement lors de la prochaine valeur est ajoutée dans la colonne ajouter de la valeur à la première, et ainsi de suite...
TextBox
lorsqu'une ligne est ajoutée à votre DataGridView
, ne serait-il pas plus logique d'essayer de l'attacher à un événement sur la grille?Lorsque vous voulez le mettre à jour dans la zone de texte?
TextChanged
n'est pas le bon endroitje veux que textBox9 calcule la somme automatiquement pour n'importe combien de lignes sont là, dans le Datagridview...
supposons que je veuille prendre la somme du premier coulmn...quand j'ajoute de la valeur=2 dans coulmn textBox9 obtient 2 automatiquement lors de la prochaine valeur est ajoutée dans la colonne ajouter de la valeur à la première, et ainsi de suite...
OriginalL'auteur Haider Khattak | 2013-11-13
Vous devez vous connecter pour publier un commentaire.
Vous avez votre code, mais plutôt je l'ai mis dans le CellValueChanged de l'événement et assurez-vous que c'était la même cellule que vous cherchez. Cela va me faire virer si la valeur de la cellule des changements, ou si une nouvelle ligne est ajoutée et par la suite devient une valeur assignée.
Je diviser votre logique dans une méthode distincte, donc en cas vous souhaitez obtenir la somme pour quelque chose d'autre, vous pouvez simplement appeler cette méthode. Je suppose que vous pourriez viens de lire zone de texte.Le texte, mais...
J'ai aussi utilisé le Double.TryParse qu'il fournit de la protection de base au cas où la valeur de cette cellule n'est pas en fait un certain nombre. Je ne sais pas quelle est la source des données (utilisateur a entré /à partir d'une source extérieure?) alors j'ai pensé ajouter un peu de protection.
Modifier Subvention soulève un excellent point, editted ma solution pour inclure la valeur de la cellule en cours de modification. J'ai utilisé le CellValueChanged de l'événement au lieu de CellEndEdit, au cas où quelque chose d'autre que l'utilisateur peut modifier sa valeur.
Je crois que c'était parce que le total a été généré avant de la cellule était d'avoir une valeur définie. Si vous mettez un point d'arrêt dans la boucle for, vous pouvez vérifier la
Value
propriété vous-même. J'ai aussi modifié mon code pour uniquement appuyer sur la CellValueChanged événement qui pourrait être mieux. Essayez à la place.bien désolé, je n'ai pas actualisé la page et n'a pas vu les changements dans le code... eh bien, il a travaillé maintenant...merci...
Pas de problème, content que ça a fonctionné. Vous pourriez sorte de mélange de ma réponse, avec une Subvention de la réponse. Son code fournit peu plus sophistiqué de protection contre les mauvaises données dans la cellule.
c'est moins efficace que si nous avons beaucoup de lignes, chaque fois qu'une cellule est modifiée, nous avons à boucle sur toutes les lignes, juste pour mettre à jour la somme.
OriginalL'auteur sab669
c'est la meilleure manière simple :
Rufuss - Il vraiment utile et de façon trop simple coz vous avez juste à appeler cette méthode à l'intérieur de la méthode de chargement de la Grille.
OriginalL'auteur Rufuss Carnegie
Si vous avez besoin de prendre en compte la possibilité qu'un utilisateur peut modifier les valeurs dans les lignes de la grille, vous pouvez vous abonner à la
CellEndEdit
événement.Ici, je suis à la vérification de l'index de colonne de sorte que vous n'êtes pas à recalculer la somme si tous les autres sans rapport avec les colonnes de l'édition. (Je suis aussi de la validation de l'entrée et du réglage de la valeur à 0 si, par exemple, quelqu'un entre dans les lettres.)
D'autres peuvent avoir de meilleures solutions... c'est juste une possibilité.
OriginalL'auteur Grant
OriginalL'auteur محمد النعيمي
Vous avez à gérer l'événement
CellValueChanged
. Toutefois, votre approche est un peu mal parce qu'à chaque fois qu'une valeur de cellule modifications, vous devez effectuer une boucle sur toutes les lignes de mise à jour de la somme. Vous devriez piste votre cellule à modifier pour enregistrer la dernière valeur, alors vous pouvez mettre à jour la somme facilement. La somme doit être calculée initialement à l'aide de la boucle. C'est juste fait 1 fois.NOTE: je suppose que la colonne que vous souhaitez, pour résumer, est nommé
sumColumn
, nous devrions utiliserName
à la colonne de référence parce que c'est plus lisible. Le code ci-dessus ne prend pas en compte le cas lors de l'ajout de nouvelles lignes et supprimer des lignes de la grille. En fait, chaque fois que l'ajout et la suppression de la programmation, vous devez mettre à jour lessum
facilement juste avant l'ajout et la suppression. Pour l'ajout de nous peut gérer laRowsAdded
événement. Tous le gestionnaire d'événement suivant les inscriptions doivent être placés dans unForm.Load
gestionnaire d'événement:Cependant pour la suppression de lignes, c'est très délicat. Le
RowsRemoved
ne fonctionne pas bien, nous ne pouvons pas renvoyer l'supprimé les lignes de plus dans laRowsRemoved
gestionnaire d'événements, de sorte que nous pourrions avoir à parcourir toutes les lignes et de mise à jour de la somme:C'est pour la suppression des lignes à la fois le code et l'utilisateur. Une autre option qui est mieux, c'est que vous avez à gérer la
UserDeletingRow
(mais cela ne fonctionne que pour la suppression des lignes par l'utilisateur, et non par le code). Pour gérer la suppression des lignes de code, je pense que vous pouvez toujours insérer le code de mise à jour de lasum
avant tout code en supprimant les lignes, c'est ici:Noter que tous les gestionnaires d'événements doit être enregistré après votre grille a été initialisé avec des données initiales suivantes par le
sum
d'initialisation.OriginalL'auteur King King