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*
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
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