Bonjour,
Je sais le titre n'est pas très clair, mais moi-même je suis un peu dans le flou.
Voilà j'ai une entité Stock, qui est une relation 0,n -- 0,n, pointant vers un Produit d'un côté, et un Entrepôt de l'autre, et définissant quelle quantité d'un produit on a dans quel entrepôt.
Grâce à une fenêtre modale l'utilisateur peut sélectionner un Produit dans un ComboBox, rempli par une ObservableCollection<Produit> (enfin par la ListCollectionView qui en est tirée pour être précis). Préalablement pour remplir cette collection, on fait une recherche à partir de ce que l'utilisateur a saisi dans une TextBox, ainsi :
Dès que l'utilisateur choisi un des Produit de la liste, l'entité Stock qui est une propriété privée de la fenêtre, est liée à celui-ci, ainsi :
Code c# : 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 private void textBoxRechercheProduit_KeyUp(object sender, KeyEventArgs e) { //Si l'utilisateur vide de lui-même la textbox, on réinitialise la recherche if (String.IsNullOrEmpty(textBoxRechercheProduit.Text) && this._collectionProduits != null) { this._collectionProduits.Clear(); buttonResetSearch.IsEnabled = false; } string textSearch = textBoxRechercheProduit.Text.Trim().ToLower(); buttonResetSearch.IsEnabled = true; //On effectue la recherche à partir de 3 lettres au minimum if (textSearch.Length < 3) return; //Entity ne supporte pas le mot-clef "Contains" sur les entités, donc on doit utiliser "Except" //On cherche les produits non présents dans l'entrepôt dont le nom/l'identifiant correspond à la recherche IQueryable<Produit> queryProduits = from pro in entities.Produit.Except(this._produitsAlreadyInEntrepot) where pro.IsActive && (pro.NomProduit.ToLower().Contains(textSearch) || pro.IdentifiantProduit.ToLower().Contains(textSearch)) select pro; this._collectionProduits.Clear(); foreach (Produit item in queryProduits) this._collectionProduits.Add(item); }
Mais si jamais l'utilisateur refait une recherche, et que la collection de produits est vidée (this._collectionProduits.Clear(); ), la référence vers le produit est perdue pour le Stock (qui perd aussi son Entrepôt au passage).
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 private void listBoxProduits_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (listBoxProduits.SelectedIndex == -1) return; monStock.Produit = listBoxProduits.SelectedItem as Produit; }
Et c'est là que je ne comprends pas... La propriété "Produit" de l'objet Stock devrait pointée vers le Produit au-delà de la collection, non?
Ou alors il y a une notion de programmation objet que j'ai mal saisie... Ou alors c'est une notion d'Entity Framework que j'ai mal saisie...
Merci à ceux qui pourront m'éclairer.
Partager