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.
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
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
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 ??