none
Utilisateur bloqué sur un textbox vide

    Question

  • Bonjour,
    Voilà 4h que je cherche une réponse sur le net et par moi même mais en vain ... pourtant je suis sûr que la solution est toute bête
    Contexte :
    J'ai une Base de donnée qui donne liste de référence de produit et leurs attribut (N°Réf, Libellé Produit, Tarif, Unité du tarif (pièce, kg...), Dimensions (Lxlxh), Conditionnement (nombre de pièces par colis, nombre de pièces par barquette, nombre de barquette par colis), Code EAN, ...)
    Certains de ces attributs sont obligatoires (comme par exemple N°Ref et Libellé) contrairement à d'autres
    J'autorise donc la valeur DBNull pour ces derniers.
    Seulement, dans certains cas, il est même impératif que des attributs soient null
    Dans le cas par exemple d'un produit vendu à la "barquette", je veux que le nombre de pièces par colis soit null
    Lors de la création de la base de données, aucun soucis, tout fonctionne parfaitement... jusqu'aux essais utilisateurs... lorsqu'il veut changer un article vendu à la pièce en article vendu à la barquette, il change la valeur d'un combobox pour l'unité du tarif puis il doit "effacer" la valeur dans le champ textbox correspondant à "nombre de pièce par colis" mais il reste coincé dans la textbox sans autre moyen d'en sortir que d'y remettre une valeur 
    Mes essais :
    J'ai essayé de changé la propriété causevalidation à "false", il sort bien du textbox mais là c'est à l'enregistrement que le problème se pose : la valeur initiale reste dans la base de donnée...
    J'ai ensuite essayé de gérer l’événement combobox.textchanged, ou validated 
    private void comboBox4_Validated(object sender, EventArgs e)
    {
            // Vérifie si l'unité tarif est barquette ou sachet
            if (C.ContainsIC(comboBox4.Text, "barq", "sac"))
            {
                nbrePceColisTextBox.text = null;
                nbrePceColisTextBox.ReadOnly = true;
            }
            else
                nbrePceColisTextBox.ReadOnly = false;
    }
    Pour le même résultat, à savoir qu'à l'enregistrement, la valeur initiale revient et cela même si le textbox est bien devenu null à l'écran.
    Au final j'ai créer un bouton pour enregistrer directement dans la base de donnée la valeur null comme ceci :
    private void button4_Click(object sender, EventArgs e)
    {
        int n = refProdBindingSource.Position;
        BDDDataSet.RefProdRow RPR = BDDDataSet.RefProd.FindByRef(Convert.ToInt32(refTextBox.Text));
        RPR["NbrePceColis"] = DBNull.Value;
        refProdTableAdapter.Update(BDDDataSet.RefProd);
        refProdTableAdapter.Fill(BDDDataSet.RefProd);
        refProdBindingSource.Position = n;
    }
    ce qui fonctionne parfaitement mais n'est pas très pratique, alors j'ai essayé de fusionner les 2 idées en rajoutant ce code dans l’événement du combobox mais là c'est la valeur du combobox qui revient à sa valeur initiale (même en ayant rajouter RPR["UTarif"]=combobox4.Text;)
    Je pourrais me contenter du bouton, mais je pense qu'il doit y avoir beaucoup plus simple pour transformer la valeur string.Empty d'un textbox en null (ou DBNull.Value) ... mais je ne la connais pas, c'est là que j'ai besoin de votre aide...
    Merci d'avance


    jeudi 10 août 2017 17:34

Réponses

  • Bonjour,

    Merci pour votre réponse, mais le problème n'est pas d'afficher des données de la base de données vers un textbox, il consiste à autoriser la valeur string.empty dans un textbox bindé à un champ typé int

    Cependant j'ai résolu mon problème avec ces quelques lignes de codes :

                foreach (Control c in this.panel1.Controls)
                    if (c is TextBox)
                        c.DataBindings["Text"].NullValue = "";
    ainsi la valeur string.empty (ou "") est reconnu comme étant la valeur DBNull (dans cet exemple, cela vaut dans les textbox du panel1)


    vendredi 11 août 2017 16:45

Toutes les réponses

  • Bonjour,
    Quelle base de donnée utilisez-vous? Consultez l'exemple dans le thread suivant:
    How to display data from database into textbox, and update it

    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.

    vendredi 11 août 2017 14:21
    Modérateur
  • Bonjour,

    Merci pour votre réponse, mais le problème n'est pas d'afficher des données de la base de données vers un textbox, il consiste à autoriser la valeur string.empty dans un textbox bindé à un champ typé int

    Cependant j'ai résolu mon problème avec ces quelques lignes de codes :

                foreach (Control c in this.panel1.Controls)
                    if (c is TextBox)
                        c.DataBindings["Text"].NullValue = "";
    ainsi la valeur string.empty (ou "") est reconnu comme étant la valeur DBNull (dans cet exemple, cela vaut dans les textbox du panel1)


    vendredi 11 août 2017 16:45