Portée des variables

Résolu
thonyboy Messages postés 165 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 16 février 2011 - 12 sept. 2008 à 14:56
thonyboy Messages postés 165 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 16 février 2011 - 13 sept. 2008 à 21:49
Bonjour

J'ai un peu de mal avec la portée des variables et j'aimerais que l'on m'éclaire un peu

Je fais un ptit prog qui charge une base Nom + Prenom et qui l'affiche dans un DataGrid.
Comme j'ai besoin d'accéder a ma table depuis plusieurs procédures, je l'ai déclaré en dehors des procédures.
J'ai cru comprendre que c'est comme ca qu'il fallait faire.... (voir bout de code ci dessous)

Ce qui me choque c'est que si je met un point d'arret en debug sur la ligne de déclaration de la table par exemple  (Public Table3 AsNew DataTable)
je constate que chaque fois que je clique sur une ligne de ma datagrid, je passe par ce point d'arret !!!! et franchement je ne comprend pas la raison.

Du coup je me dit que a chaque fois que je clique sur un enregistrement je redéclare ce qui est déjà déjà déclaré ?

Bref j'aimerais bien comprendre, ou alors ce n'est pas comme cela que j'aurais du faire ?

D'avance merci

Partial

Class Default4

Inherits System.Web.UI.Page

Public Data3
As
New DataSet()

Public Table3
As
New DataTable

Dim Nom
As
New DataColumn(
"Nom",
GetType(System.String))
Dim Prenom
As
New DataColumn(
"Prénom",
GetType(System.String))

Protected
Sub ListeUtilisateurs() 'Procédure qui rempli ma table
  
If Data3.Tables.Count > 0
Then
      Data3.Tables(0).Clear()

  Else
 Table3.Columns.Add(Nom)
 Table3.Columns.Add(Prénom)

 Data3.Tables.Add(Table3)

End
If
 'Etc Etc Etc ensuiste je le met l'affiche sur un data grid
'
End Sub
 

4 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 36
13 sept. 2008 à 14:59
Un singleton par exemple.

Ce n'est pas propre de mettre des variables publiques
en publiques tu ne devrais avoir que des propriétés.

Tes variables devraient être locales.

NB Dim --> variable private (et ne devrait être employé que dans les déclarations locales)
3
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 36
12 sept. 2008 à 23:36
Salut,

Alors le probleme est simple.
A chaque fois que tu cliques sur une ligne il y a reformation (un nouveau rendu) de la page
et renvoyé au client (navigateur web) c'est un postback

Et comme ta variable est globale à la page.
Elle est réinitialisée, car la classe est réinstanciée.
0
thonyboy Messages postés 165 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 16 février 2011
13 sept. 2008 à 07:11
Merci nhervagault.

Mais alors que faut  t'il faire pour eviter cela et avoir des  variables avec une portée sur toute mon aplli ?
0
thonyboy Messages postés 165 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 16 février 2011
13 sept. 2008 à 21:49
Merci je vais approfondir tout ca.
0
Rejoignez-nous