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

VB.NET Discussion :

Interdire une valeur nulle dans une cellule de datagrid


Sujet :

VB.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 46
    Points : 48
    Points
    48
    Par défaut Interdire une valeur nulle dans une cellule de datagrid
    Bonjour,

    J'ai une datagridview que je remplis à la main de cette façon :
    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
     
    'Création des colonnes
    dgvCoefMarge.Columns.Add("margeid", "Id")
    dgvCoefMarge.Columns("margeid").Visible = False
    dgvCoefMarge.Columns.Add("code", "Code")
    dgvCoefMarge.Columns("code").ReadOnly = True
    dgvCoefMarge.Columns.Add("libelle", "Libellé")
    dgvCoefMarge.Columns("libelle").ReadOnly = True
    dgvCoefMarge.Columns.Add("taux", "Taux")
    dgvCoefMarge.Columns("taux").ReadOnly = True
    dgvCoefMarge.Columns.Add("coef", "Coefficient")
     
    'Ajout des lignes depuis un datatable "donnees"
    Dim ligneCoef as Datarow
    For Each ligneCoef In donnees.Rows
                dgvCoefMarge.Rows.Add()
                Dim derniere As Integer = dgvCoefMarge.Rows.Count - 1
                dgvCoefMarge.Item(0, derniere).Value = ligneCoef.Item("margeid")
                dgvCoefMarge.Item(1, derniere).Value = ligneCoef.Item("codeactanal2")
                dgvCoefMarge.Item(2, derniere).Value = ligneCoef.Item("codeactlibelle")
                dgvCoefMarge.Item(3, derniere).Value = ligneCoef.Item("codeacttaux")
                dgvCoefMarge.Item(4, derniere).Value = ligneCoef.Item("coef")
                ' cellule 4 = de type numérique
                dgvCoefMarge.Item(4, derniere).ValueType = GetType(Double)
            Next
    L'utilisateur a donc un tableau dans lequel je l'autorise à modifier la 4ème cellule ("coef").
    Je n'arrive pas à interdire la saisie d'une valeur nulle.
    Comment faire ?

    Merci !

  2. #2
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962
    Par défaut
    Sur l'évènement CellEndEdit je suppose

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 46
    Points : 48
    Points
    48
    Par défaut
    Oui, j'utilise le CellEndEdit avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim nouveaucoef As Double
    ' Test : la valeur saisie est elle nulle ?
    If dgvCoefMarge.Item(e.ColumnIndex, e.RowIndex).Value Is DBNull.Value Then
      MessageBox.Show("Merci de saisir une valeur")
     
      ' Focus sur la cellule erronée
      dgvCoefMarge.Item(e.ColumnIndex, e.RowIndex).Selected = True
      dgvCoefMarge.BeginEdit(True)
      Exit Sub
    End If
    nouveaucoef = CDbl(dgvCoefMarge.Item(e.ColumnIndex, e.RowIndex).Value)
    Mais je trouve que c'est très sale comme code ...

    De plus, ça ne marche pas bien : si l'utilisateur valide avec Entrée, il a :
    - un message "Merci de saisir une valeur"
    - la cellule du dessous est sélectionnée et vidée
    - un deuxième message "Merci de saisir une valeur"
    - la cellule erronée est sélectionnée et en édition

    -> donc ça a vidé la cellule du dessous (qui n'avait rien à voir dans l'histoire !)

    Il me semble bizarre d'être obligé de passer par des bouts de code un peu pourris au lieu de définir une propriété quelque part qui interdit le null.

    Que faire ?

  4. #4
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962
    Par défaut
    regardes éventuellement du coté des DataGridViewCellStyle avec les propriétés NullValue, IsNullValueDefault, etc...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 46
    Points : 48
    Points
    48
    Par défaut
    OK, merci pour ton aide, j'ai résolu le problème de la façon suivante :

    Je déclare un style de datagridview "unStyle", dans lequel je définis la valeur à mettre en cas de saisie nulle. Je mets une valeur que je sais invalide pour le type de ma cellule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim unStyle As New DataGridViewCellStyle
    unStyle.NullValue = "VALEURNULLE"
    dgvCoefMarge.Columns("coef").DefaultCellStyle = unStyle
    Ensuite, lorsque je crée mes cellules, je définis un type double :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    dgvCoefMarge.Item(4, derniere).Value = ligneCoef.Item("coef")
    ' cellule 4 = de type numérique
    dgvCoefMarge.Item(4, derniere).ValueType = GetType(Double)
    Ca permet de générer un évènement de type DataError lorsque l'utilisateur entre une valeur invalide, il n'y a plus qu'à la gérer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub dgvCoefMarge_DataError(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles dgvCoefMarge.DataError
         MessageBox.Show("Valeur saisie invalide")
    End Sub
    Merci Bidou.

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

Discussions similaires

  1. Insertion d'une valeur null dans une clé étrangère
    Par labib23dz dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/03/2012, 10h24
  2. Réponses: 8
    Dernier message: 05/04/2011, 08h06
  3. Réponses: 82
    Dernier message: 05/02/2011, 14h34
  4. Réponses: 1
    Dernier message: 11/06/2008, 13h33
  5. Affcecter une valeur NULL dans une requete paramétrée
    Par thiouwz2 dans le forum Bases de données
    Réponses: 7
    Dernier message: 05/11/2004, 15h02

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