thorgal1612
Messages postés117Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention19 janvier 2008
-
8 août 2006 à 11:43
thorgal1612
Messages postés117Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention19 janvier 2008
-
9 août 2006 à 11:40
Bonjour,
J'ai encore une fois besoin de votre aide.
J'ai un DataGridView dans lequel j'ajoute des lignes pas un bouton.
Lorsque je crée un ligne je voudrais non seulement me positionner sur une cellule mais aussi que le curseur soit actif (Comme si j'avais double cliqué sur cette cellule).
J'arrive à me positionner en faisant this.mvtCaisseDataGridView.CurrentRow.Cells["MvtCaisse_Montant"].Selected = true; mais pas à rendre actif le curseur.
Ma 2ème question : Lorsque j'ajoute une nouvelle ligne (en cliquant sur mon bouton), je voudrais contrôler si une des zones de mon Grid est bien renseignée pour la ligne courante.
J'ai mis le code dans l'évenement "RowValidated" du DataGridView:
privatevoid mvtCaisseDataGridView_RowValidated(object sender, DataGridViewCellEventArgs e)
{
try
{
if (String.IsNullOrEmpty(Convert.ToString(this.mvtCaisseDataGridView.CurrentRow.Cells["MvtCaisse_Montant"].Value)))
thrownewException("Le montant est obligatoire");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
Il m'affiche bien le message mais ajout tout de même la nouvelle ligne.
J'espère que j'ai été assez clair
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201437 8 août 2006 à 11:59
Pour ta première question... as-tu essayé en invoquant la méthode BeginEdit ? (sur l'objet DataSource de mémoire)
et pour la seconde l'évènement RowValidated arrive trop tard (Validated, c'est du passé), utilise plutot l'évènement Validating (présent donc) qui t'offre la possibilité d'annuler la validation en passant False à sa propriété Cancel.
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201437 9 août 2006 à 11:28
tu ne peux pas arrêter le click...
mais tu peux faire ceci :
try
{
this.ControleMontant();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message,this.Name,MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
return; // ca force à sortir de la méthode immédiatement.
}
this.mvtCaisseBindingSource.AddNew();
thorgal1612
Messages postés117Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention19 janvier 2008 8 août 2006 à 12:29
Merci pour ta réponse.
Le BeginEdit fonctionner parfaitement.
Par contre pour la validation, je me suis rendu compte après mon post qu'il fallait mettre mon code dans le RowValidatingJ'ai essayé avec e.Cancel False et aussi avec e.Cancel True mais ça ne marche pas.
Du coup, voilà ce que j'ai essayé : Avant la création d'une nouvelle ligne, je déclenche l'évenement RowValidating en gérant l'exception
private
void mvtCaisseDataGridView_RowValidating(
object sender,
DataGridViewCellCancelEventArgs e)
{
if (
String.IsNullOrEmpty(
Convert.ToString(
this.mvtCaisseDataGridView.CurrentRow.Cells[
"MvtCaisse_Montant"].Value)))
throw
new
Exception(
"Le montant est obligatoire");
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201437 8 août 2006 à 13:44
normal... car dans ton try/catch, tu attaches un délégué à l'évènement RowValidating de ton DataGirdView... cette opération (sauf ca exceptionnel) ne déclenchera pas d'erreur.
le mieux est de traiter l'erreur directement dans le délégé :
thorgal1612
Messages postés117Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention19 janvier 2008 9 août 2006 à 10:24
ça ne fonctionne pas. J'ai bien l'erreur mais une nouvelle ligne est tout de même ajoutée.
il faudrait que j'arrive à ne pas déclencher l'évènement "Click" de mon bouton si l'évènement "RowValidating" provoque une erreur.
Je ne sais pas si c'est possible ????
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201437 9 août 2006 à 11:04
attention... je crois que tu te trompes dans l'utilisation du try/catch/finally.
Le finally est exécuté quoiqu'il arrive... (erreur ou pas erreur).
Autre chose... il ne faut pas accroché le délégué de l'évènement RowValidating au moment du clic sur le bouton mais au plus tard dans le load du formulaire. ainsi, l'erreur se déclenchera avant même que tu cliques sur le bouton.
Sébastien FERRAND
(
blog )
Consultant Indépendant
[Microsoft MVP Visual C#]
thorgal1612
Messages postés117Date d'inscriptiondimanche 14 novembre 2004StatutMembreDernière intervention19 janvier 2008 9 août 2006 à 11:21
Merci encore pour ton aide. Je suis désolé mais j'ai du mal à comprendre.
Le Finally s'exécute qu'il y est erreur ou pas. J'ai essayé de l'enlever, j'ai bien une erreur mais il ajoute qd même ma ligne.
Comment faire pour que l'action "Click" s'arrête ?