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 :

DataGridView Déclencher la validation d'une cellule


Sujet :

Windows Forms

  1. #1
    Membre régulier
    Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 99
    Points : 115
    Points
    115
    Par défaut DataGridView Déclencher la validation d'une cellule
    Bonjour,

    J'ai dans une fenêtre un DataGridView et un bouton.
    La DGV autorise les modifications et possède des cellules "DataGridViewTextBoxCell"

    Si je modifie la valeur d'une cellule (x,y par exemple) et que je passe à une autre cellule ou à un autre contrôle, l'événement "CellValidating" est déclenché.

    Si je modifie la valeur d'une cellule (x', y') et je que clique sur le bouton, l'événement "CellValidating" n'est pas déclenché.
    Si dans le traitement lancé par le clique sur le bouton, j'appelle : "Rows[x'].Cells[y'].Value" je n'obtient pas la nouvelle valeur que je viens de saisir, mais la valeur antérieur.

    Avez-vous une idée me permettant d'être sûr que "Value" est forcément conforme au "Texte" de la cellule ?

  2. #2
    Membre régulier
    Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 99
    Points : 115
    Points
    115
    Par défaut
    C'est un problème à notre fmk interne.

    En pure .NET, je n'arrive pas à reproduire mon problème :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    using System;
    using System.ComponentModel;
    using System.Drawing;
    using System.Windows.Forms;
     
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            private Button button1;
            private DataGridViewTextBoxColumn col;
     
            /// <summary>
            /// Variable nécessaire au concepteur.
            /// </summary>
            private IContainer components = null;
     
            private DataGridView dataGridView1;
     
            public Form1()
            {
                InitializeComponent();
     
                var row = new DataGridViewRow();
                row.Cells.Add(new DataGridViewTextBoxCell());
                dataGridView1.Rows.Add(row);
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                MessageBox.Show(string.Format("La valeur de la cellule (0,0) est {0}", dataGridView1.Rows[0].Cells[0].Value));
            }
     
            /// <summary>
            /// Nettoyage des ressources utilisées.
            /// </summary>
            /// <param name="disposing">true si les ressources managées doivent être supprimées*; sinon, false.</param>
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }
     
            #region Code généré par le Concepteur Windows Form
     
            private GroupBox groupBox1;
     
            /// <summary>
            /// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
            /// le contenu de cette méthode avec l'éditeur de code.
            /// </summary>
            private void InitializeComponent()
            {
                button1 = new Button();
                dataGridView1 = new DataGridView();
                col = new DataGridViewTextBoxColumn();
                ((ISupportInitialize) (dataGridView1)).BeginInit();
                SuspendLayout();
                // 
                // button1
                // 
                button1.Location = new Point(138, 182);
                button1.Name = "button1";
                button1.Size = new Size(142, 23);
                button1.TabIndex = 0;
                button1.Text = "Valeur de la cellule (0,0)";
                button1.UseVisualStyleBackColor = true;
                button1.Click += new EventHandler(button1_Click);
                // 
                // dataGridView1
                // 
                dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
                dataGridView1.Columns.AddRange(new DataGridViewColumn[]
                                                   {
                                                       col
                                                   });
                dataGridView1.Location = new Point(40, 26);
                dataGridView1.Name = "dataGridView1";
                dataGridView1.Size = new Size(240, 150);
                dataGridView1.TabIndex = 1;
     
                dataGridView1.AllowUserToAddRows = false;
                dataGridView1.AllowUserToDeleteRows = false;
     
                dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
                dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
                dataGridView1.ColumnHeadersVisible = false;
     
                dataGridView1.EditMode = DataGridViewEditMode.EditOnEnter;
                dataGridView1.MultiSelect = false;
                dataGridView1.Name = "dataGridView1";
                dataGridView1.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders;
                dataGridView1.SelectionMode = DataGridViewSelectionMode.CellSelect;
                dataGridView1.ShowCellErrors = false;
                dataGridView1.ShowCellToolTips = false;
                dataGridView1.ShowEditingIcon = false;
                dataGridView1.ShowRowErrors = false;
                // 
                // col
                // 
                col.HeaderText = "Colonne1";
                col.Name = "col";
     
                groupBox1 = new GroupBox();
                SuspendLayout();
                // 
                // groupBox1
                // 
                groupBox1.Dock = DockStyle.Fill;
                groupBox1.Location = new Point(0, 0);
                groupBox1.Name = "groupBox1";
                groupBox1.Size = new Size(292, 266);
                groupBox1.TabIndex = 0;
                groupBox1.TabStop = false;
                groupBox1.Text = "groupBox1";
                groupBox1.Controls.Add(dataGridView1);
                groupBox1.Controls.Add(button1);
     
                // 
                // Form1
                // 
                AutoScaleDimensions = new SizeF(6F, 13F);
                AutoScaleMode = AutoScaleMode.Font;
                ClientSize = new Size(292, 266);
                Controls.Add(groupBox1);
                Name = "Form1";
                Text = "Form1";
                ((ISupportInitialize) (dataGridView1)).EndInit();
                ResumeLayout(false);
            }
     
            #endregion
        }
    }

  3. #3
    Membre régulier
    Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 99
    Points : 115
    Points
    115
    Par défaut
    Pour ceux que cela peut interesser un jour, c'est la propriété AutoValidate de la form parent qui a provoqué mon problème.

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    J'ai eu un problème du même type sur un Datagridview listant des pourcentage dont la somme devait faire 100% et un bouton servant à sauvegarder les données dans la BD.

    J'ai remarqué que le fait d'appuyer sur ce satané bouton ne faisait pas quitter le dgv (il y a toujours le crayon d'édition) et du coup on pouvait sauvegarder les données sans passer par la validation.

    J'ai résolu le problème avec un simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if Not Me.Validate() Then Exit Sub
    au début de la procédure de sauvegarde (on peut aussi lancer une exception à la place du Exit Sub selon sa tolérance aux spagettis)

    Ceci a pour effet de tester la validation de tous les controls de la forms (renvoie false si pas valide).

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

Discussions similaires

  1. [VB.NET][DataGridView]:couleur de fond d'une cellule
    Par BigTicket42 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 13/05/2008, 22h07
  2. Réponses: 3
    Dernier message: 28/02/2008, 21h28
  3. Réponses: 12
    Dernier message: 05/03/2007, 11h52
  4. executer une macro apres validation d'une cellule
    Par lio62 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/01/2007, 19h20
  5. [C#][VS2005]datagridview accéder au controle d'une cellule
    Par camilero dans le forum Windows Forms
    Réponses: 3
    Dernier message: 09/06/2006, 11h40

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