Bonjour,

J'ai un gridview qui est définie dans le code behind comme ceci:

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
 
        Dim col_DACOMP, col_LIOPE_COOPX, col_DAVALM, col_MONS As New BoundField
        Dim col_CONECI As New TemplateField
 
        mess = ""
 
        'Connexion à la base de l'appli
        DA.SQLConnect(ConfigurationManager.AppSettings("BaseAppli"), ConfigurationManager.AppSettings("CnxFormatString"))
 
        'Création source de données
        With SqlDataSourceEcritures
            .ConnectionString = ConfigurationManager.AppSettings("CnxFormatString") & "database=" & ConfigurationManager.AppSettings("BaseAppli") & ";"
            .SelectCommand = ReqEcritures(nucoi, comax, coopx, date_inf, date_sup, montant_inf, montant_sup, flag_mt_inf_0)
        End With
 
 
        'Définition des colonnes
 
        With col_CONECI
            .HeaderText = ""
            .ItemTemplate = New DynamicVuTemplate
            .ItemStyle.Width = New Unit(3, UnitType.Pixel)
        End With
 
        'Date de comptabilisation
        With col_DACOMP
            .DataField = "DACOMP"
            .HeaderText = "Date de comptabilisation"
            '.SortExpression = "DACOMP"
            .ItemStyle.Width = New Unit(15, UnitType.Percentage)
        End With
        'Libellé code opération (code opération)
        With col_LIOPE_COOPX
            .DataField = "LIOPE_COOPX"
            .HeaderText = "Code Opération"
            '.SortExpression = "LIOPE_COOPX"
            .ItemStyle.Width = New Unit(40, UnitType.Percentage)
        End With
        ' Date de valeur
        With col_DAVALM
            .DataField = "DAVALM"
            .HeaderText = "Date de valeur"
            '.SortExpression = "DAVALM"
            .ItemStyle.Width = New Unit(15, UnitType.Percentage)
        End With
        ' Montant
        With col_MONS
            .DataField = "MONS"
            .HeaderText = "Montant"
            '.SortExpression = "MONS"
            .ItemStyle.Width = New Unit(15, UnitType.Percentage)
        End With
 
        'Définition du GridVew
        With GV_Ecritures
            'Style du GridView
            .Width = New Unit(100, UnitType.Percentage)
            .BackColor = Color.FromName("White")
            .BorderColor = Color.FromArgb(153, 153, 153)
            .BorderStyle = 0
            .BorderWidth = New Unit(1, UnitType.Pixel)
            .CellPadding = 3
            .Font.Name = "Arial"
            .Font.Size = New FontUnit(10, UnitType.Pixel)
            .GridLines = 2
            'Comportement et lien aux données
            .DataKeyNames = New String() {"CONECI"}
            '.AllowSorting = False
            .AllowPaging = True
            .PageSize = 25
            .AutoGenerateColumns = False
            .PagerSettings.PageButtonCount = 15
            .DataSourceID = "SqlDataSourceEcritures"
            'style des parties annexes (entête, pied,...)
            .FooterStyle.BackColor = Color.FromArgb(204, 204, 204)
            .FooterStyle.ForeColor = Color.FromName("Black")
            .RowStyle.BackColor = Color.FromArgb(238, 238, 238)
            .RowStyle.ForeColor = Color.FromName("Black")
            .PagerStyle.BackColor = Color.FromArgb(135, 206, 235)
            .PagerStyle.ForeColor = Color.FromName("Black")
            .PagerStyle.HorizontalAlign = HorizontalAlign.Center
            .SelectedRowStyle.BackColor = Color.FromArgb(0, 138, 140)
            .SelectedRowStyle.Font.Bold = "True"
            .SelectedRowStyle.ForeColor = Color.FromName("White")
            '.HeaderStyle.BackColor = Color.FromArgb(135, 206, 235)
            .HeaderStyle.BackColor = Color.LightSteelBlue
            .HeaderStyle.Font.Bold = "True"
            .HeaderStyle.ForeColor = Color.FromName("White")
            .AlternatingRowStyle.BackColor = Color.FromName("Gainsboro")
            .PagerSettings.Mode = 3
 
            'Ajout des colonnes
 
            .Columns.Add(col_CONECI)
            .Columns.Add(col_DACOMP)
            .Columns.Add(col_LIOPE_COOPX)
            .Columns.Add(col_DAVALM)
            .Columns.Add(col_MONS)
 
            .DataBind()
 
 
        End With
J'ai une class que j'ai récupéré sur le net pour définir mon template avec la checkbox:
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
 
Public Class DynamicVuTemplate
 
    Implements ITemplate
 
    Public Overridable Overloads Sub InstantiateIn(ByVal container As Control) Implements ITemplate.InstantiateIn
        'container: dataControlFieldCell, cellule en cours
        'Création d'un nouveau label
        Dim oVu As CheckBox = New CheckBox
 
        'Surcharge de la methode databinding du label, pointe sur BindLabel de la classe courante
        AddHandler oVu.DataBinding, AddressOf BindLabel
 
        'Ajout du label à la collection de controles de la cellule
        container.Controls.Add(oVu)
 
    End Sub
 
    Public Sub BindLabel(ByVal sender As Object, ByVal e As EventArgs)
        'Fonction appellée à la suite d'InstantiateIn, sender:oLabel
        'Redefinition de olabel, recuperation de celui de la fonction appelante
        Dim oVu As CheckBox = CType(sender, CheckBox)
        'Definition de la gridViewRow contenant oLabel (le namingContainer d'un objet dans une cellule est la row correspondante)
        Dim container As GridViewRow = CType(oVu.NamingContainer, GridViewRow)
        'Definition du comportement du label
        If Not IsDBNull(container.DataItem("CONECI")) Then
            Select Case container.DataItem("CONECI")
                Case 1
                    oVu.Checked = True
                Case Else
                    oVu.Checked = False
            End Select
            oVu.ID = "Ovu"
            oVu.Enabled = True
        End If
 
    End Sub
 
End Class
et quand je clique sur un bouton sur ma page je souhaite savoir si les lignes sont cochées ou pas:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
            Dim Rowstot As Integer = GV_Ecritures.Rows.Count
            For i = 0 To (Rowstot - 1)
                If (CType(GV_Ecritures.Rows(i).Cells(0).FindControl("oVu"), CheckBox).Checked) Then
                    Response.Write("ok")
                Else
                    Response.Write("ko")
                End If
            Next
Quand j'exécute la page j'ai l'erreur suivante sur mon test IF:

La référence d'objet n'est pas définie à une instance d'un objet.
Description : Une exception non gérée s'est produite au moment de l'exécution de la demande Web actuelle. Contrôlez la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

Détails de l'exception: System.NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet.


Erreur source:


Ligne 712 : Dim Rowstot As Integer = GV_Ecritures.Rows.Count
Ligne 713 : For i = 0 To (Rowstot - 1)
Ligne 714 : If (CType(GV_Ecritures.Rows(i).Cells(0).FindControl("oVu"), CheckBox).Checked) Then
Ligne 715 : Response.Write("ok")
Ligne 716 : Else


Fichier source : V:\wwwDEV\TEXTO\nouvelle.aspx.vb Ligne : 714

Trace de la pile:


[NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet.]
_Default.BAjoute_Click(Object sender, EventArgs e) in V:\wwwDEV\TEXTO\nouvelle.aspx.vb:714
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +126
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +135
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +39
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +37
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +87
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4177