Récupérer une valeur d'un Control User acsx dans un Label

ryckbosch Messages postés 9 Date d'inscription dimanche 1 juin 2003 Statut Membre Dernière intervention 9 septembre 2004 - 8 juil. 2004 à 10:56
ryckbosch Messages postés 9 Date d'inscription dimanche 1 juin 2003 Statut Membre Dernière intervention 9 septembre 2004 - 8 juil. 2004 à 19:13
Bonjour,

Je ne sais pas si j'utilise correctement le passage des variables entre un Control User (Nbre_Sites.ascx) et la page qui l'appelle (Test.aspx), mais je n'arrive pas à récupérer une valeur venant du Control user pour l'affecter à un outil Label (id= "Lbl_Count") dans le cade présenté ci-dessous.

Voici le code que j'utilise pour cela, et je ne trouve pas mon erreur.
Merci par avance à tout ceux qui pourrait me dire ou se trouve mon erreur, car je ne sais plus quoi faire.

Code page Test.aspx
------------------------
<%@ Page Language ="vb" AutoEventWireup= "false" Codebehind="Test.aspx.vb" Inherits="NetWork.Test"%>
<%@ Register TagPrefix="Net" TagName="NbSites" Src="Nbre_Sites.ascx" %>

<html>
<head>
<title>Test</title>
</head>

<form id="Form1" method="post" runat="server">
<net:nbsites id="NbSites_1" prop_sites="Liste_Sites" runat="server" />

</form>

</html>

Code behind Test.aspx.vb
-----------------------------
Public Class Test
Inherits System.Web.UI.Page

#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 Lbl_Count As System.Web.UI.WebControls.Label
Protected WithEvents Label1 As System.Web.UI.WebControls.Label

'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
Dim Nombre As New Nbre_Sites Lbl_Count.Text "Réponse " & Nombre.Prop_Nbr
End Sub

End Class

Code page Nbre_Sites.ascx
------------------------------
<%@ Control Language ="vb" AutoEventWireup= "false" src="Nbre_Sites.ascx.vb" Inherits="Nbre_Sites" %>

Code behind Nbre_Sites.ascx.vb
------------------------------------
Imports System
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.HtmlControls
Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration

Public Class Nbre_Sites
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 Label As System.Web.UI.WebControls.Label

'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
Dim _Prop_Sites As String
Dim _Prop_Nbr As String

Public Property Prop_Sites() As String
Get
Return _Prop_Sites
End Get

Set(ByVal Value As String)
_Prop_Sites = Value
End Set
End Property

Public Property Prop_Nbr() As String
Get
Return _Prop_Nbr
End Get

Set(ByVal Value As String)
_Prop_Nbr = Value
End Set
End Property

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

Private Function Nbre_Enregistrement(SQL_String As String)
Dim SQL As String = "SELECT Count(*) FROM " & SQL_String
Dim DB As SqlConnection = New SqlConnection(ConnectionString())
Dim SQL_CMD As SqlCommand = New SqlCommand(SQL, DB)
Dim iCount As Integer

SQL_CMD.Connection.Open()
iCount = cInt(SQL_CMD.ExecuteScalar())
Label.Text = iCount
_Prop_Nbr = iCount
SQL_CMD.Connection.Close()
End Function

Private Function ConnectionString() As String
Dim myConn As String = ConfigurationSettings.AppSettings("ConnectionString")
Return myConn
End Function

End Class

12 réponses

jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
8 juil. 2004 à 12:19
Ton problème semble venir d'ici :

Dim Nombre As New Nbre_SitesLbl_Count.Text "Réponse " & Nombre.Prop_Nbr

tu instancie un nouveau Nbre_site, ce ne sera donc pas le meme que celui déclare dans la page

pour que ca fonctionne, il faudrais ajouter :
dan Test.aspx.vb
Protected WithEvents NbSites_1 As Nbre_site
Lbl_Count.Text "Réponse " & NbSites_1.Prop_Nbr

Je suis pas sur que ca marche, mais ca ne pouvait pas marcher avant :)

sinon tu as cette methode :
http://www.aspfr.com/code.aspx?ID=8942

@+

Cyril
0
ryckbosch Messages postés 9 Date d'inscription dimanche 1 juin 2003 Statut Membre Dernière intervention 9 septembre 2004
8 juil. 2004 à 12:47
Merci pour cette réponse, mais cela ne semble pas être la solution du problème.

Après avoir ajouté donc la ligne :
Protected WithEvents NbSites_1 As Nbre_Sites

une fois compilé, j'obtient l'erreur cette fois :

"La classe de base comporte le champ 'NbSites_1', mais son type (NetWork.Nbre_Sites) n'est pas compatible avec le type du contrôle (ASP.Nbre_Sites_ascx)."

On dirait cette fois qu'il n'y a pas compatibilité avec le control ASCX.
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
8 juil. 2004 à 13:34
c'est à quelle ligne qu'il y a cette erreur ?

Cyril
0
ryckbosch Messages postés 9 Date d'inscription dimanche 1 juin 2003 Statut Membre Dernière intervention 9 septembre 2004
8 juil. 2004 à 14:01
Dans la ligne 10 indiquée en rouge ci-dessous :

Ligne 8 :
Ligne 9 : <form id="Form1" method="post" runat="server">
Ligne 10 : <net:nbsites id="NbSites_1" prop_sites="Liste_Sites" runat="server" />

Ligne 11 :
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
8 juil. 2004 à 14:31
Je comprend pas l'erreur :(
d'habitude je fais pas comme ca. j'instancie le controle par le code, et le rajoute à la page dans le code.
Voici comment je ferais :
Dim Nombre As New Nbre_Sites
page.controls.add(Nombre)
Lbl_Count.Text "Réponse " & Nombre.Prop_Nbr

et j'enleverais le controle dans la partie aspx: supprimes ca : <net:nbsites id="NbSites_1" prop_sites="Liste_Sites" runat="server" />

je pense que ca devrait marcher, mais ca fait pas mal de temps que je n'ai pas fait ca, et je m'en rappelle pas trop :)

Cyril
0
ryckbosch Messages postés 9 Date d'inscription dimanche 1 juin 2003 Statut Membre Dernière intervention 9 septembre 2004
8 juil. 2004 à 14:57
Merci beaucoup Cyril,

Cela ne fonctionne pas non plus d'autant plus que je ne pas supprimer la ligne :

<net:nbsites id="NbSites_1" prop_sites="Liste_Sites" runat="server" />

car je fais un transfert de variable; ici c'est prop_sites="Listes-_Sites"

J'avais déjà essayé pas mal de truc autour de tout ça, mais rien ne passe.

Le but de ma manip est la suivante :

- Transférer en partant d'une page ASPX un valeur vers un Control User, celui-ci traite une requête en fonction de la valeur qu'il a reçu, et je dois récupérer le résultat dans un label sur la page de départ ASPX.

Merci encore Cyril pour ton aide.

Alain
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
8 juil. 2004 à 17:28
pour ton premier problème :

Dim Nombre As New Nbre_Sites
Nombre .prop_sites="Listes-_Sites"
page.controls.add(Nombre)

Par contre, j'ai une question pourkoi fais tu un UserControl, alors qu'apparemment il ne retourne aucun code HTML.

pourkoi ne ferais tu pas tout simplement une classe ?

Cyril
0
ryckbosch Messages postés 9 Date d'inscription dimanche 1 juin 2003 Statut Membre Dernière intervention 9 septembre 2004
8 juil. 2004 à 18:18
OK Super Cyril, cela fonctionne bien maintenant. Merci encore.

Je n'ai pas fait de classe parce que je me maîtrise pas encore suffisament ce language.

J'ai réalisé un site complet pour la gestion des adresses IP, VLAN, Réseau, Sous-Réseau etc... d'un réseau d'entreprise (gros réseau) avec serveur 2003, base sur SQL2000.

Du coté ASP, il n'y a pas trop de souci, mais coté ASP.NET, il y a un peu plus de suptilité.

En fait, j'essaye de traduire tout le code que j'ai fait pour ce site vers ASP.NET (+ de 130 pages ASP, à peu prés 16000 lignes de code). J'ai utilisé des techniques particulièrement suptiles, et le mettre en ASP.NET, cela va me faire un peu de boulot.

Alain,
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
8 juil. 2004 à 18:37
oui mais je te conseil avant de te lancer dans un projet comme celui la, de bien connaitre asp.net.
Dans ton cas je passerais pas une classe, c'est beaucoup plus simple, et surement beaucoup plus performant, la notion de classe en asp était presque absente mais je te conseil de t'y mettre.

Exemple de classe

Public Class Employe

Public Name as string
Public CodeEmploye as integer

Public sub New( ByVal Nom as string)
Name = Nom
end sub

Public function GetCodeEmploye() as integer
dim Code as integer
'interrogation dans la base de donné
return Code
end Function

End Class

Dans le page load de la page :

public sub Page_Load(...)

dim Personne as new Employe("Durand")
Label1.text = Personne.GetCodeEmploye

end sub

dans le .aspx :

Voici un exemple d'utilisation d'une classe, c'est un exemple tres simple. j'espere que ca te permettra de voir le fonctionnement de celles ci

@+

Cyril
0
ryckbosch Messages postés 9 Date d'inscription dimanche 1 juin 2003 Statut Membre Dernière intervention 9 septembre 2004
8 juil. 2004 à 18:56
Je crois que ma prochaine étape d'autoformation, c'est de me consacrer un peu plus vers les classes.

A voir ton exemple, ca n'a pas l'air trop compliqué et surtout ca l'air plus souple que ma procédure.

Je vais m'inspirer de ton exemple pour mieux aborder les classes en ASP.NET.

Encore merci pour ton aide bien précieuse.

@+

Alain,
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
8 juil. 2004 à 19:04
si tu veux apprendre à te servir des classes, je te conseil d'aller voir des sources sur vbfrance.com car ici la plupart des sources reste trop pres du contenu ou alors de prendre un bouquin sur vb.net ...

Cyril
0
ryckbosch Messages postés 9 Date d'inscription dimanche 1 juin 2003 Statut Membre Dernière intervention 9 septembre 2004
8 juil. 2004 à 19:13
Toujours bon à prendre comme info, je vais aller y faire quelques sauts pour mieux aborder ce point.

Merci encore du tuyau,

A charge de revanche.

Alain,
0
Rejoignez-nous