none
Générateur CellStyle DataGridView : mettre en majuscules

    Question

  • Bonjour,

    Une colonne contient le format de livre "P" ou "E" remplis normalement avec un combobox ; dans ce cas, le format est bien en majuscules.

    Si par erreur, la saisie est fausse (P alors que c'est E) alors l'opérateur va devoir la rectifier.

    Comment créer un format de saisie qui transforme la saisie en majuscules que ce soit des majuscules ou des minuscules qui soient saisies ?

    (En VB dans Visual Studio 2005, le format "L" dans le générateur remplissait cet office et à la sortie de la ligne, mettait la saisie en majuscules).

    Malgré de nombreuses recherches sur le web, je n'ai pas trouvé ce format.

    Merci de votre aide.

    dimanche 2 avril 2017 12:21

Réponses

Toutes les réponses

  • Bonjour,
    Consultez les articles suivants: Control.Validating événementString.ToUpper méthode () et les exemple ici: How to convert string to uppercase in windows textbox?

    Cordialement,
    Nina

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    lundi 3 avril 2017 11:15
    Modérateur
  • Bonjour et merci de votre réponse,

    J'avais bien vu tous ces articles ; dans un datagridview, je n'ai pas trouvé la propriété CharacterCasing.

    En plus, il faudrait qu'elle soit applicable au choix à chaque colonne puisqu'il n'y a que 2 colonnes que je veux en majuscule.

    J'ai aussi essayé avec la méthode ToUpper() dans l'évènement dataGridView_RowValidated mais là, je n'ai pas su comment mettre en forme le code pour que cela fonctionne :

    e.Row.Cells["genreDataGridViewTextBoxColumn"].Value = e.Row.Cells["genreDataGridViewTextBoxColumn"].Value.ToUpper();

    me renvoie une erreur "DataGridViewCellEventArg ne contient pas de définition pour Row".

    Je suppose que le format est mauvais, ai essayé en enlevant e puis Row et divers autres combinaisons mais n'ai pas trouvé la bonne écriture.

    A moins qu'il faille passer par un autre évènement ?

    lundi 3 avril 2017 11:42
  • J'ai avancé et trouvé un bloc de code qui semble fonctionner :

      private void titresDataGridView_RowValidated(object sender, DataGridViewCellEventArgs e)
            {
                if (titresDataGridView.AllowUserToAddRows == true && newNumTitres > int.Parse(lastNumTitresLabel2.Text))
                {
                    var cell5 = titresDataGridView.CurrentRow.Cells["genreDataGridViewTextBoxColumn"].Value;
                      if(cell5 != null)
                      {
                        titresDataGridView.CurrentRow.Cells["genreDataGridViewTextBoxColumn"].Value = cell5.ToString().ToUpper();
                      }
                }
    
            }

    Je test donc que je suis sur une nouvelle ligne en vérifiant que l'on peut ajouter des lignes et que le numéro de la ligne est bien le dernier.

    Déjà, si j'écris dans la colonne que je veux en majuscule en minuscule, ce ne sera que lorsque cette ligne perdra le focus que le changement s'opérera (ce qui me semble valable pour un évènement RowValidated).

    Sans ce bloc de codes, quand j'ai fini d'ajouter une ligne et donc que le curseur est sur la ligne en dessous, et que je remonte pour donner le focus à une autre ligne, tout se passe bien.

    Avec ce code, une exception apparaît qui me dit que la colonne titre ne peut pas être nulle.

    Effectivement, je ne veux pas de titre null et ma base est programmée en ce sens.

    J'ai pensé que ce code créait la ligne et ai donc rajouté un contrôle non null (second if) pour essayer de palier à ce problème mais cela ne fonctionne pas.

    Quelle est mon erreur ?

    Edit : j'ai essayer un test sur la colonne nomTitre qui semble marcher ; par contre le problème est que la variable cell5 est nulle et donc mon test ne marche pas.

    "if titresDataGridView.CurrentRow.Cells[numTitresDataGridViewTextBoxColumn]" pour supprimer le problème sur la colonne Titres.

    J'ai essayé avec "if (cell5 != DbNull.Value) " mais cela ne fonctionne pas plus ...

    • Modifié Serjean38 jeudi 6 avril 2017 21:40
    jeudi 6 avril 2017 16:16
  • J'ai modifié mon code :

    private void titresDataGridView_RowValidated(object sender, DataGridViewCellEventArgs e)
            {
            //    if (titresDataGridView.CurrentRow.Cells["nomTitresDataGridViewTextBoxColumn"].Value == null)
            //    {
            //        return;
            //    }
                    if (titresDataGridView.AllowUserToAddRows == true && newNumTitres > int.Parse(lastNumTitresLabel2.Text))
                    {
                        var cell5 = titresDataGridView.CurrentRow.Cells["genreDataGridViewTextBoxColumn"].Value;
                           if (cell5 == null)
                           {
                             return;
                           }
                             else
                           {
                             titresDataGridView.CurrentRow.Cells["genreDataGridViewTextBoxColumn"].Value = cell5.ToString().ToUpper();
                           }
                    }
            }

    Je n'ai plus d'exception relative à cell5 de valeur nulle.

    Par contre, j'ai une exception qui se déclenche sur la cellule titres qui ne doit pas être nulle et en scrutant le débogage, c'est à un moment où je décide de remonter d'une ligne et où le curseur se trouve soit au début, soit à la fin de l'évènement "DefautValueNeeded" du DatagridView.

    Donc mon bloc de code scrutant la valeur de la cellule titres au début de "RowValidated" ne sert à rien.

    J'avoue arriver en limite de mes petites compétences pour me sortir de ce problème ...

    vendredi 7 avril 2017 19:13
  • Finalement, j'ai supprimer l'évènement RowValidated et ai utilisé le même code dans l'évènement RowLeave et cela fonctionne.

    • Marqué comme réponse Serjean38 vendredi 7 avril 2017 20:29
    vendredi 7 avril 2017 20:29