IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C# Datagrid] Comment contrôler la saisie d'un colonne ?


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 43
    Points : 40
    Points
    40
    Par défaut [C# Datagrid] Comment contrôler la saisie d'un colonne ?
    Bonjour,

    Je voudrais contrôler la saisie d'une colonne d'un datagrid par rapport à une autre colonne. J'ai trouvé un bout de code dans la doc pour contrôler une colonne mais pour le reste je ne sais pas comment faire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    private void Incu_Globale_ColumnChanging(object sender, System.Data.DataColumnChangeEventArgs e)
            {
                if (e.Column.ColumnName.Equals("NB_INCUBE") )
                {
                    int valeur=int.Parse(e.ProposedValue.ToString());
                    if ((valeur<0) | (valeur > 20))
                    {
                        MessageBox.Show("Le nombre d'oeufs incubés doit être < à 20 !");
                    }
                }
            }
    Ensuite j'ai ajouté
     
    ds_gen.Tables["INCU_GLOBALE"].ColumnChanging += new DataColumnChangeEventHandler(this.Incu_Globale_ColumnChanging);
    Ok, ça marche bien mais j'aimerais aller plus loin. C'est à dire contrôler la valeur de la colonne NB_INCUBE (Nombre d'oeufs incubés) par rapport à la colonne NB_PONDU (nombre d'oeufs pondus).
    Merci d'avance

  2. #2
    Membre éprouvé
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 273
    Points : 1 280
    Points
    1 280
    Par défaut
    désolé moi je suis en vb, dans ce code je supose que tu rempli ton datagrid avec un dataset :

    je considere que les oeufs incubés sont dans la deuxieme colonne de ton datatable et que les oeuf pondus sont dans la troisieme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    dim dr as datarow
     
    for each dr in dataset.tables("datatable").rows
    if dr(1) > dr(2) Then
    messagebox.show("oeuf incubé superieur à oeuf pondu")
    end if
    next
    j'suis vert !

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 43
    Points : 40
    Points
    40
    Par défaut
    Mais oui bien sur en mettant RowChanging plutot que ColumChanging ça fait bien ce que je veux :

    [code]

    private void Incu_Globale_RowChanging(object sender, System.Data.DataRowChangeEventArgs e)
    {
    int nb_incube_ponte,nb_incube;
    nb_incube_ponte=int.Parse(e.Row.ItemArray[4].ToString());
    if (nb_incube_ponte >0)
    {
    nb_incube=int.Parse(e.Row.ItemArray[5].ToString());
    if (nb_incube > nb_incube_ponte)
    {
    MessageBox.Show("Le nombre d'oeufs incubés doit être inférieur à "+nb_incube_ponte.ToString()+" !");
    e.Row.ItemArray[5]="0";
    e.Row.RowError = "La colonne Nombre d'incubé a une erreur";
    }
    else
    {
    e.Row.ItemArray[6]="M";
    e.Row.RowError ="";
    }
    }
    }
    [\Code]

    Par contre, je voudrais changer la valeur d'un autre champ si la valeur est acceptée. Or si je travaille sur le DataTable comme je le fais si dessus, il ne m'affcihe pas les modifs dans le datagrid qui lui est associé ou alors j'ai oublié de faire quelque chose. En fait je ne maitrise pas trop les datagrid et datatable.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 238
    Points : 269
    Points
    269
    Par défaut
    Je pense que si ta DataTable est Binder à ton DataGrid un simple refresh tu DataGrid devrait afficher les bonnes valeurs.
    « L’erreur est humaine, mais un vrai désastre nécessite un ordinateur »

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 43
    Points : 40
    Points
    40
    Par défaut
    J'ai bien mis dans mon code le "Binder" enfin j'espère :
    dgrIndivGlobale.SetDataBinding(ds_gen,ds_gen.Tables["INCU_GLOBALE"].TableName);

    1) J'ai mis dgrIndivGlobale.Refresh() : rien n'a changé
    2) J'ai mis dgrIndivGlobale.Update() : rien n'a changé
    3) J'ai essayé de travailler directement dans le datagrid dans ma fonction Incu_Globale_RowChanging :
    dgrIndivGlobale[dgrIndivGlobale.CurrentRowIndex,6]="M";
    Il met à l'exécution :
    En en-tête : Erreur lors de la validation de la ligne avec le magasin de données d'origine
    Corps du message : Impossible d'appeller EndEdit dans un événement OnChanging. Souhaitez vous corriger la valeur ?

    4) Si je mets dans cette même fonction la ligne :
    ds_gen.Tables["INCU_GLOBALE"].AcceptChanges();
    Même erreur à l'exécution que pour 3)

    5) Il y a sûrement des mécanismes complexes derrière tout cela. Peut-être a-t-il raison de ne pas accepter ce que je veux lui faire faire. Car si je modifie une autre colonne de la ligne, le ChangingRow va-t-il se redéclencher ? Ce qui entrainerait un processus sans fin ... Bon là je dis peut-être n'importe quoi car en fait je n'y comprend rien.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] comment automatiser la saisie d'une colonne
    Par bambi98 dans le forum Excel
    Réponses: 3
    Dernier message: 07/11/2012, 11h20
  2. Réponses: 6
    Dernier message: 14/05/2012, 21h59
  3. Réponses: 2
    Dernier message: 07/11/2008, 16h34
  4. Réponses: 11
    Dernier message: 11/03/2007, 19h33
  5. Comment contrôler la carte graphique ?
    Par Nico*3-3 dans le forum Assembleur
    Réponses: 5
    Dernier message: 13/02/2005, 20h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo