Tout est dans le titre,


je travail en WPF avec la version DevExpress 15.1


Dans une liste de produits qui peuvent avoir différents prix de vente je souhaite dans la colonne du prix permettre à l'utilisateur de choisir parmi les prix déjà configurés pour le produit courant (je compte utiliser ce concept a profusion dans beaucoup d'autres context)


Donc pour la même colonne Prix la liste des prix affichés dépend de la valeur d'une autre colonne (id Produit) de la même ligne tout en prenant en charge la possibilité d'ajouter une nouvelle valeur qui n'existe pas dans ItemsSource du LookeupEdit de la colonne en cours d’édition.


Actuellement j'arrive à avoir ce que je voulait mais, lorsque j'ai plusieurs lignes de différents produits, lorsque je rentre en mode édition du Prix d'un produit les valeurs de la même colonne des autres produit (des autres lignes) disparaît si elle n'existe pas dans le ItemsSource du LookeupEdit de la ligne en cours d’édition, ce qui est complètement normal puisque j'affect le EditSettings à la colonne et je ne trouve pas le moyen pour faire en sorte que je l'affect seulement à la ligne courante ou du moins empêcher les autres lignes de réagir vus que normalement puisqu'ils ne sont pas en mode édition je ne comprend pas pour quoi le EditSettings les affecte.


voila comment j'ai procédé :


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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
            private void mouvement_detailTableView_ShowingEditor(object sender, ShowingEditorEventArgs e)
            {
                if (e.Row != null)
                {
                    switch (e.Column.FieldName)
                    {
                        case "MDT_PRIX":
                            var l = new LookUpEditSettings()
                            {
                                ValueMember = "MtPrix",
                                DisplayMember = "MtPrix",
                                ItemsSource = ((mouvement_detail)e.Row).ListePrix,
                                AllowNullInput = true,
                                NullText = string.Empty,
                                PopupMaxHeight = 110,
                                IsPopupAutoWidth = false,
                                ImmediatePopup = true,
                                AutoComplete = true,
                                IncrementalFiltering = true,
                                Name = "PART_Editor"
                            };
                            break;
                        case "MDT_LOT":
                            mouvement_detailGridControl.Columns["MDT_LOT"].EditSettings = new LookUpEditSettings
                            {
                                ValueMember = "NomLot",
                                DisplayMember = "NomLot",
                                ItemsSource = ((mouvement_detail)e.Row).ListeLots,
                                AllowNullInput = true,
                                NullText = string.Empty,
                                PopupMaxHeight = 200,
                                IsPopupAutoWidth = false,
                                ImmediatePopup = true,AutoComplete = true,
                                IncrementalFiltering = true,
                                Name = "PART_Editor"
                            };
                            break;
                    }
                }
            }
 
            private void mouvement_detailTableView_ShownEditor(object sender, EditorEventArgs e)
            {
                TableView view;
                LookUpEdit Edit;
                switch (e.Column.FieldName)
                {
                    case "MDT_PRIX":
                        view = sender as TableView;
                        Edit = view.ActiveEditor as LookUpEdit;
                        if ((string)Edit.Tag == "ProcessNewValueHandlerAssigned") return;
                        Edit.ProcessNewValue += new ProcessNewValueEventHandler(MDT_PRIX_ProcessNewValue);
                        Edit.Tag = "ProcessNewValueHandlerAssigned";
                        break;
                    case "MDT_LOT":
                        view = sender as TableView;
                        Edit = view.ActiveEditor as LookUpEdit;
                        if ((string)Edit.Tag == "ProcessNewValueHandlerAssigned") return;
                        Edit.ProcessNewValue += new ProcessNewValueEventHandler(MDT_LOT_ProcessNewValue);
                        Edit.Tag = "ProcessNewValueHandlerAssigned";
                        break;
                }
            }
 
            private void mouvement_detailTableView_HiddenEditor(object sender, EditorEventArgs e)
            {
                //return;
                switch (e.Column.FieldName)
                {
                    case "MDT_PRIX":
                        mouvement_detailGridControl.Columns["MDT_PRIX"].EditSettings = null;
                        break;
                    case "MDT_LOT":
                        mouvement_detailGridControl.Columns["MDT_LOT"].EditSettings = null;
                        using (Entities ctx = new Entities())
                        {
                            var id = (e.Row as mouvement_detail).ART_ID;
                            var lot = (e.Row as mouvement_detail).MDT_LOT;
                            var o = ctx.mouvement_detail.Where(a => a.ART_ID == id && a.MDT_LOT == lot && a.MDT_DLC_LOT != null).FirstOrDefault();
                            if (o != null)
                            {
                                (e.Row as mouvement_detail).MDT_DLC_LOT = o.MDT_DLC_LOT;
                            }
                            else
                            {
                                (e.Row as mouvement_detail).MDT_DLC_LOT = DateTime.Today;
                            }
                        }
                        break;
                }
            }
 
 
            private void MDT_PRIX_ProcessNewValue(DependencyObject sender, ProcessNewValueEventArgs e)
            {
                var x = ((LookUpEdit)e.Source).ItemsSource;
                (x as IList<mouvement_detail.Prix>).Add(
                                                            new mouvement_detail.Prix()
                                                            {
                                                                NomPrix = "Nouvelle Valeure",
                                                                MtPrix = Convert.ToDecimal(e.DisplayText)
                                                            }
                                                        );
                e.Handled = true;
            }
 
            private void MDT_LOT_ProcessNewValue(DependencyObject sender, ProcessNewValueEventArgs e)
            {
                var x = ((LookUpEdit)e.Source).ItemsSource;
                (x as IList<mouvement_detail.Lot>).Add(
                                                            new mouvement_detail.Lot()
                                                            {
                                                                NomLot = e.DisplayText,
                                                                DateLot = DateTime.Today
                                                            }
                                                        );
                e.Handled = true;
            }