Hello,
Dans mon projet actuel j'ai créé un wizard d'encodage pour faciliter la vie aux utilisateurs. Ca fonctionne nickel sauf un truc bizarre dans la forme suivante.
Ici, le code de la classe PROMO_BLL.Concessions :
Code vb : 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 Public Class frmStep2Demo Public Property CurrentUser As PROMO_BLL.User Public Property PreviousStep As frmStep1 Private _cons As PROMO_BLL.Concessions Private _con As PROMO_BLL.Concession Public Property SelectedConcessions As PROMO_BLL.Concessions Public Sub New(user As PROMO_BLL.User, step1 As frmStep1) ' This call is required by the designer. InitializeComponent() ' Add any initialization after the InitializeComponent() call. CurrentUser = user PreviousStep = step1 SelectedConcessions = New PROMO_BLL.Concessions InitDGV() End Sub Private Sub InitDGV() Dim index As Integer With dgvDemo .AutoGenerateColumns = False .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill index = .Columns.Add("dgvcId", "Id") .Columns(index).DataPropertyName = "Id" .Columns(index).Visible = False index = .Columns.Add("dgvcCode", "Code") .Columns(index).DataPropertyName = "Code" index = .Columns.Add("dgvcDesc", "Description") .Columns(index).DataPropertyName = "Description" End With With dgvSelectedDemo .AutoGenerateColumns = False .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill index = .Columns.Add("dgvcId", "Id") .Columns(index).DataPropertyName = "Id" .Columns(index).Visible = False index = .Columns.Add("dgvcCode", "Code") .Columns(index).DataPropertyName = "Code" index = .Columns.Add("dgvcDesc", "Description") .Columns(index).DataPropertyName = "Description" End With End Sub Private Sub InitConcessions() _cons = PROMO_BLL.Concessions.GetByDepartment(PreviousStep.Department.DTO.Id) dgvDemo.DataSource = _cons.DTO.OrderBy(Function(x) x.Code).ToList dgvSelectedDemo.DataSource = SelectedConcessions.DTO.OrderBy(Function(x) x.Code).ToList End Sub Private Sub frmStep2Demo_Load(sender As Object, e As EventArgs) Handles MyBase.Load InitConcessions() End Sub End Class
Code vb : 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 Public Class Concessions Public Property DTO As List(Of PROMO_DTO.CodeDemo) Public Sub New() Me.DTO = New List(Of PROMO_DTO.CodeDemo) End Sub Public Shared Function GetByDepartment(dep_id As Short) As Concessions Dim result As New Concessions For Each c As PROMO_DTO.CodeDemo In PROMO_DAL.Concession.GetByDepartment(dep_id) result.DTO.Add(c) Next Return result End Function Public Shared Function GetByBuyDept(ba_id As Byte) As Concessions Dim result As New Concessions For Each c As PROMO_DTO.CodeDemo In PROMO_DAL.Concession.GetByBuyDept(ba_id) result.DTO.Add(c) Next Return result End Function Public Function GetById(cont_id As Integer) As Concession Return New Concession((From c In Me.DTO Where c.Id = cont_id Select c).FirstOrDefault) End Function Public Function GetByCode(code As String) As Concession Return New Concession((From c In Me.DTO Where c.Code = code Select c).FirstOrDefault) End Function End Class
Et pour finir, voici le wizard qui affiche, entre autre, ce formulaire (dans le Case 2) :
Code vb : 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 Private Function StartWizard(startAtStep As Integer) As Integer Dim i As Integer = startAtStep If i = 1 Then steps = New Dictionary(Of Integer, Form) End If 'showing of encoding wizard While Not (i = 0 Or i = 6) 'initializing the wizard's screens Select Case i Case 1 If Not steps.Keys.Contains(1) Then steps.Add(1, New frmStep1(CurrentUser)) End If Case 2 If Not steps.Keys.Contains(2) Then steps.Add(2, New frmStep2Demo(CurrentUser, CType(steps(1), frmStep1))) End If Case 3 If Not steps.Keys.Contains(3) Then steps.Add(3, New frmStep3Demo(CurrentUser, CType(steps(2), frmStep2Demo))) Else steps(3) = New frmStep3Demo(CurrentUser, CType(steps(2), frmStep2Demo)) End If Case 4 Select Case CType(steps(3), frmStep3Demo).Action Case frmStep3Demo.ActionType.List If Not steps.Keys.Contains(4) Then steps.Add(4, New frmStep4DemoList(CurrentUser, CType(steps(2), frmStep2Demo))) ElseIf Not TypeOf steps(4) Is frmStep4DemoList Then steps(4) = New frmStep4DemoList(CurrentUser, CType(steps(2), frmStep2Demo)) End If Case frmStep3Demo.ActionType.Auto If Not steps.Keys.Contains(4) Then steps.Add(4, New frmStep4DemoAuto(CurrentUser, New PROMO_BLL.PromoType(Promo.DTO.Type))) ElseIf Not TypeOf steps(4) Is frmStep4DemoAuto Then steps(4) = New frmStep4DemoAuto(CurrentUser, New PROMO_BLL.PromoType(Promo.DTO.Type)) End If Case frmStep3Demo.ActionType.Popup If Not steps.Keys.Contains(4) Then steps.Add(4, New frmStep4DemoPopUp(CurrentUser, New PROMO_BLL.PromoType(Promo.DTO.Type))) ElseIf Not TypeOf steps(4) Is frmStep4DemoPopUp Then steps(4) = New frmStep4DemoPopUp(CurrentUser, New PROMO_BLL.PromoType(Promo.DTO.Type)) End If End Select Case 5 If Not steps.Keys.Contains(5) Then steps.Add(5, New frmFinishDemo(CurrentUser, Me.Promo, CType(steps(1), frmStep1), CType(steps(2), frmStep2Demo), CType(steps(3), frmStep3Demo), steps(4))) Else steps(5) = New frmFinishDemo(CurrentUser, Me.Promo, CType(steps(1), frmStep1), CType(steps(2), frmStep2Demo), CType(steps(3), frmStep3Demo), steps(4)) End If End Select 'showing the screens Dim result As DialogResult = steps(i).ShowDialog If result = Windows.Forms.DialogResult.OK Then i += 1 ElseIf result = Windows.Forms.DialogResult.Cancel Then i -= 1 ElseIf result = Windows.Forms.DialogResult.Abort Then i = 0 End If End While Return i End Function
Ce formulaire n'est donc instancier qu'une seule fois. L'initialisation des DGV ne se fait qu'une seule fois puisque la sub qui s'en occupe n'est appelée que dans le constructeur du formulaire.
Or, si j'accède au formulaire et que la propriété DTO de l'instance de PROMO_BLL.Concessions créée par la sub InitConcessions est une liste vide, alors, lors du prochain affichage affichage de ce step (réalisé en retournant au step précédent, en choisissant un autre rayon et en revenant sur ce step), alors, la colonne ID s'affiche dans la DGV nommé dgvDemo.
Je ne comprends absolument pas pourquoi vu que je ne rend cette colonne visible nullepart !
Quelqu'un a-t-il déjà rencontré ce genre de bug ?? Une idée de où je dois chercher ??
Partager