Usercontrole : La référence d'objet n'est pas définie à une instance d'un objet.

Signaler
Messages postés
121
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
24 juin 2010
-
Messages postés
10
Date d'inscription
vendredi 9 juin 2006
Statut
Membre
Dernière intervention
13 décembre 2007
-
Bonjour à tous,

Voilà mon problème: je viens de créer une nouvelle application .net et j'ai l'erreur suivante dès que je positionne un usercontrol ?

La référence d'objet n'est pas définie à une instance d'un objet.

Pourtant j'ai une autre application .net avec les mêmes paramêtres et tout fonctionne ? Vous allez me dire qu"il y a sûrement une différence quelque part et je vous l'accorde mais je ne sais ou ?

voici le code de ma page contenant mon usercontrole :


Imports System.Web.UI.UserControl

Imports LibStats

Public
Class accueil1

Inherits System.Web.UI.UserControl


#
Region " Code généré par le Concepteur Web Form "

'Cet appel est requis par le Concepteur Web Form.
<System.Diagnostics.DebuggerStepThrough()>
Private
Sub InitializeComponent()

End
Sub



Protected
WithEvents LinkButGestion1
As System.Web.UI.WebControls.LinkButton

'REMARQUE : la déclaration d'espace réservé suivante est requise par le Concepteur Web Form.
'Ne pas supprimer ou déplacer.
Private designerPlaceholderDeclaration
As System.Object



Private
Sub Page_Init(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles
MyBase.Init

'CODEGEN : cet appel de méthode est requis par le Concepteur Web Form
'Ne le modifiez pas en utilisant l'éditeur de code.
InitializeComponent()

End
Sub
#
End
Region



Private
Sub Page_Load(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles
MyBase.Load



CType(
Me.Page.FindControl("Login11"), login1).Visible =
False



End
Sub


End
Class

Thierry

7 réponses

Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
C'est sur cette ligne la :
CType(Me.Page.FindControl("Login11"), login1).Visible = False

que ca plante ?

Ceci vient du fait je suppose que Login11 n'existe pas dans la page, surement car login11 est contenu dans un UC lui meme contenu dans la page ...

si tu as le nom de l'uc tu peux faire :

me.Page.findControl("uc").findControls("login11")

sinon va falloir t'amuser avec la recursivité + reflection pour trouver le bon type : QDB :)


<HR>
Cyril - MVS - MCP ASP<
Messages postés
121
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
24 juin 2010

hello Cyril



En fait j'ai modifié ma ligne comme ceci et cela fonctionne maintenant (j'ai supprimé Me.page)



CType(FindControl("Login11"), login1).Visible = True



Ok pour ton explication, j'ai compris !

Merci et à plus


Thierry
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
ok, donc login11 et dans l'uc courant :) et t'as rajouté l'UC comme un warrior directement à la main, sauf que pour que celui ci soit référence dans le code, il faut repasser en mode design ce qui casse tout le HTML.

j'avais ce meme problème.

Au lieu de faire un findControls tu peux déclarer ton controle dans la classe ...

Protected WithEvents Login11
As Login1

noramlement si j'ai compris ton contexte ca marche :p

<HR>

Cyril - MVS - MCP ASP
Messages postés
121
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
24 juin 2010

Ok j'ai essayé avec ta déclaration dans la classe et ça fonctionne. C'est génial!

Encore merci pour cette asctuce.

A+ Cyril et encore merci pour ton aide précieuse.

Thierry
Messages postés
10
Date d'inscription
vendredi 9 juin 2006
Statut
Membre
Dernière intervention
13 décembre 2007

Bonjour j'ai exactement le même pb avec:


Private Sub DataGrid1_UpdateCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.UpdateCommand


        Dim rowToUpdate As DataSet2.FAMILLERow


        rowToUpdate = DataSet21.FAMILLE.FindByID_FAMILLE(DataGrid1.DataKeys(e.Item.ItemIndex))


        rowToUpdate.LIBELLE = CType(e.Item.FindControl("txtEditItemFamilleName"), TextBox).Text


        SqlDataAdapter1.Update(DataSet21)


        DataGrid1.EditItemIndex = -1


        DataGrid1_Fill()


    End Sub


la ligne en gras me provoque la même erreur '...pas une référence d'objet'


J'avoue ne pas avoir saisi la soluce en C#


 
Messages postés
10
Date d'inscription
vendredi 9 juin 2006
Statut
Membre
Dernière intervention
13 décembre 2007

la ligne provoquant l'erreur:
rowToUpdate.LIBELLE = CType(e.Item.FindControl("txtEditItemFamilleName"), TextBox).Text

l'ensemble CType(......).Text me renvoie bien 6 qui est un index valide de famille

J'ai bien vu que ce n'était pas du C# mais étant nouveau sur ce forum je n'ai pas trouvé la fonction 'Edit' de message.

Merci à tous.
Messages postés
10
Date d'inscription
vendredi 9 juin 2006
Statut
Membre
Dernière intervention
13 décembre 2007

J'ai trouvé une solution: Je re-fill le dataset en début de sub:
Private Sub DataGrid1_UpdateCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.UpdateCommand

        Dim rowToUpdate As DataSet2.FAMILLERow

        SqlDataAdapter1.Fill(DataSet21)
        rowToUpdate = DataSet21.FAMILLE.FindByID_FAMILLE(DataGrid1.DataKeys(e.Item.ItemIndex))

        rowToUpdate.LIBELLE = CType(e.Item.FindControl("txtEditItemFamilleName"), TextBox).Text

        SqlDataAdapter1.Update(DataSet21)

        DataGrid1.EditItemIndex = -1

        DataGrid1_Fill()

    End Sub

J'aimerai passer le dataset en variable de session dans le prerender du usercontrol mais apparemment c'est impossible quand on travaille au niveau d'un usercontrol car a la compilation cela donne une erreur de type 'enablesessionstate' doit être à true.
Je ne peux pas paramétrer le enablesessionstate de la page car le usercontrol sera utilisé comme webpart sur un site sharepoint.

 

J'espère avoir été clair.