Bonjour,
J'ai un gridview qui est définie dans le code behind comme ceci:
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
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
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
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
Quand j'exécute la page j'ai l'erreur suivante sur mon test IF:
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
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
Partager