Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Pb passge parametres Datalist

23 réponses
Avatar
Rogério Altman
Bonjour à tous,

J'essaie de récupérer par un evenement les donneés d'une balise "Label"n
venant d'un datalist, en cliquant sur un imagebutton.
En faisant un findcontrol je n'y arrive pas ...:

mapage.aspx
--------------

<asp:DataList id="DataList1" runat="server" RepeatColumns="3"
RepeatDirection="Horizontal" OnPreRender="Page_Load">
<itemtemplate>
<asp:Image ID="Image1" runat="server" ImageUrl='<%#
DataBinder.Eval(Container.DataItem, "chemin_image") %>' /><br />
<asp:Label ID="Label1" runat="server" Text='<%#
DataBinder.Eval(Container.DataItem, "nom_image") %>' ></asp:Label><br />
<asp:ImageButton ID="ImageButton1" runat="server"
ImageUrl="~/images/icone-ajouter.gif" OnClick="ImageButton1_Click" />
</itemtemplate>


mapage.aspx.cs
----------------
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
string nom_image=
((Label)(Page.FindControl("DataList1").FindControl("Label1") )). Text ; //
JE SOUHAITE RECUPERER L'ITEM CLIQUé

SqlConnection myConnection = new
SqlConnection("server=localhost;database=zoom;Trusted_Connection=Yes");
myConnection.Open();

string chemin_image = "~/zoomimages/" + numero_zoom + @"/" +
Session["valeur"] + @"/BR/" + nom_image ;
SqlCommand myCommand = new SqlCommand("INSERT INTO panier_client
(nom_image)" +
" VALUES ('" + nom_image + "')", myConnection);
myCommand.ExecuteNonQuery();
}

Merci de vos conseils,
A+

10 réponses

1 2 3
Avatar
Gilles TOURREAU
Le Sun, 29 Jul 2007 17:24:17 +0200, Rogério Altman a écrit:

Bonjour à tous,

J'essaie de récupérer par un evenement les donneés d'une balise "Label"n
venant d'un datalist, en cliquant sur un imagebutton.
En faisant un findcontrol je n'y arrive pas ...:

mapage.aspx
--------------

<asp:DataList id="DataList1" runat="server" RepeatColumns="3"
RepeatDirection="Horizontal" OnPreRender="Page_Load">
<itemtemplate>
<asp:Image ID="Image1" runat="server" ImageUrl='<%#
DataBinder.Eval(Container.DataItem, "chemin_image") %>' /><br />
<asp:Label ID="Label1" runat="server" Text='<%#
DataBinder.Eval(Container.DataItem, "nom_image") %>' ></asp:Label><br />
<asp:ImageButton ID="ImageButton1" runat="server"
ImageUrl="~/images/icone-ajouter.gif" OnClick="ImageButton1_Click" />
</itemtemplate>


mapage.aspx.cs
----------------
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
string nom_image > ((Label)(Page.FindControl("DataList1").FindControl("Label1") )). Text ;
//
JE SOUHAITE RECUPERER L'ITEM CLIQUé

SqlConnection myConnection = new
SqlConnection("server=localhost;database=zoom;Trusted_Connection=Yes");
myConnection.Open();

string chemin_image = "~/zoomimages/" + numero_zoom + @"/" +
Session["valeur"] + @"/BR/" + nom_image ;
SqlCommand myCommand = new SqlCommand("INSERT INTO panier_client
(nom_image)" +
" VALUES ('" + nom_image + "')", myConnection);
myCommand.ExecuteNonQuery();
}

Merci de vos conseils,
A+





Comme çà de tête je dirais qu'il faudrait prendre la variable sender et
récupérer le Parent du contrôle :

((WebControl)sender).Parent.FindControl("Label1")

Cordialement

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
Rogério Altman
>> --------------

<asp:DataList id="DataList1" runat="server" RepeatColumns="3"
RepeatDirection="Horizontal" OnPreRender="Page_Load">
<itemtemplate>
<asp:Image ID="Image1" runat="server" ImageUrl='<%#
DataBinder.Eval(Container.DataItem, "chemin_image") %>' /><br />
<asp:Label ID="Label1" runat="server" Text='<%#
DataBinder.Eval(Container.DataItem, "nom_image") %>' ></asp:Label><br />
<asp:ImageButton ID="ImageButton1" runat="server"
ImageUrl="~/images/icone-ajouter.gif" OnClick="ImageButton1_Click" />
</itemtemplate>


mapage.aspx.cs
----------------
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
string nom_image >> ((Label)(Page.FindControl("DataList1").FindControl("Label1") )). Text ;
//
JE SOUHAITE RECUPERER L'ITEM CLIQUé

SqlConnection myConnection = new
SqlConnection("server=localhost;database=zoom;Trusted_Connection=Yes");
myConnection.Open();

string chemin_image = "~/zoomimages/" + numero_zoom + @"/" +
Session["valeur"] + @"/BR/" + nom_image ;
SqlCommand myCommand = new SqlCommand("INSERT INTO panier_client
(nom_image)" +
" VALUES ('" + nom_image + "')", myConnection);
myCommand.ExecuteNonQuery();
}



Comme çà de tête je dirais qu'il faudrait prendre la variable sender et
récupérer le Parent du contrôle :

((WebControl)sender).Parent.FindControl("Label1")




En réalité voici ce que j'essaie de faire:

1) J'ai une datalist contenant un certain nombre d'images piochés dans une
bdd sql server
J'ai ajouté au template de l'image un imagebutton qui doit me permettre de
lancer une requete insert.
Or, je dois passer par un evenement onclick pour le faire.
L'id de chaque image est créé lors de la compilation de mon projet, donc le
"findcontrol" ne peut pas "deviner" de quel id il s'agit. Je pense que c'est
pour cela que vous me dites de prendre la variable sender - mais je ne vois
pas très bien comment.
Avant , en asp, je rajoutais dans le lien de mon evenement onclick la
reference en question
(onclick="pagedetraitement.asp?image_n=<%=rs("nom_image")%> et j'éxecutais
ma requete insert.
En asp.net c#, je peux taper tout mon code (récupération des variables,
connexion à la bdd et requete insert) dans mon fichier aspx.cs.
Mais je crois savoirqu'il est possible aussi de le faire en passant par les
asp;parameters dans la page aspx elle-meme, grâce aux connexions que je créé
en mode design avec vwd.
J'avoue donc être perdu entre la bonne méthode à adopter: taper tout le code
dans le fichier aspx.cs ou passer par le mode de création proposé dans vwd.
Merci de vos idées et éclaircissments,

A+
Avatar
Gilles TOURREAU
Le Mon, 30 Jul 2007 10:15:54 +0200, Rogério Altman a écrit:

--------------

<asp:DataList id="DataList1" runat="server" RepeatColumns="3"
RepeatDirection="Horizontal" OnPreRender="Page_Load">
<itemtemplate>
<asp:Image ID="Image1" runat="server" ImageUrl='<%#
DataBinder.Eval(Container.DataItem, "chemin_image") %>' /><br />
<asp:Label ID="Label1" runat="server" Text='<%#
DataBinder.Eval(Container.DataItem, "nom_image") %>' ></asp:Label><br
/>
<asp:ImageButton ID="ImageButton1" runat="server"
ImageUrl="~/images/icone-ajouter.gif" OnClick="ImageButton1_Click" />
</itemtemplate>


mapage.aspx.cs
----------------
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
string nom_image >>> ((Label)(Page.FindControl("DataList1").FindControl("Label1") )). Text ;
//
JE SOUHAITE RECUPERER L'ITEM CLIQUé

SqlConnection myConnection = new
SqlConnection("server=localhost;database=zoom;Trusted_Connection=Yes");
myConnection.Open();

string chemin_image = "~/zoomimages/" + numero_zoom + @"/" +
Session["valeur"] + @"/BR/" + nom_image ;
SqlCommand myCommand = new SqlCommand("INSERT INTO panier_client
(nom_image)" +
" VALUES ('" + nom_image + "')", myConnection);
myCommand.ExecuteNonQuery();
}



Comme çà de tête je dirais qu'il faudrait prendre la variable sender et
récupérer le Parent du contrôle :

((WebControl)sender).Parent.FindControl("Label1")




En réalité voici ce que j'essaie de faire:

1) J'ai une datalist contenant un certain nombre d'images piochés dans
une
bdd sql server
J'ai ajouté au template de l'image un imagebutton qui doit me permettre
de
lancer une requete insert.
Or, je dois passer par un evenement onclick pour le faire.
L'id de chaque image est créé lors de la compilation de mon projet, donc
le
"findcontrol" ne peut pas "deviner" de quel id il s'agit. Je pense que
c'est
pour cela que vous me dites de prendre la variable sender - mais je ne
vois
pas très bien comment.
Avant , en asp, je rajoutais dans le lien de mon evenement onclick la
reference en question
(onclick="pagedetraitement.asp?image_n=<%=rs("nom_image")%> et
j'éxecutais
ma requete insert.
En asp.net c#, je peux taper tout mon code (récupération des variables,
connexion à la bdd et requete insert) dans mon fichier aspx.cs.
Mais je crois savoirqu'il est possible aussi de le faire en passant par
les
asp;parameters dans la page aspx elle-meme, grâce aux connexions que je
créé
en mode design avec vwd.
J'avoue donc être perdu entre la bonne méthode à adopter: taper tout le
code
dans le fichier aspx.cs ou passer par le mode de création proposé dans
vwd.
Merci de vos idées et éclaircissments,

A+





Si vous n'avez rien touché à la gestion des noms de vos contrôles, ASP
.NET gère les noms des contrôles XHTML de façon hierarchique... Cela est
généré automatiquement et vous n'avez pas à en vous soucier...

Lorsque vous faites un MonControl.FindControl(), ASP .NET recherche un
contrôle faisant parti du même groupe que le contrôle MonControl.
Les DataList génère pour chaque Item "un groupe de contrôle".

Si vous faites FindControl("Label1") sur un Item en particulier, ASP .NET
recherchera un contrôle dont son nom est "Label1" se trouvant dans le
groupe de l'Item et non ailleurs...

En ce qui concerne votre demande pour réaliser :
"pagedetraitement.asp?image_n=<%=rs("nom_image")"

Je vous conseille d'intercepter l'événement DataList.ItemCreated :
Dans cette événement vous recherchez dans l'Item votre contrôle
"ImageButton1", et ensuite vous affectez à la propriété "PostBackUrl" de
ce contrôle votre lien "pageTraitement...". Utilisez la propriété
e.Item.DataItem pour récupéré la "ligne de donnée" attaché à l'Item en
cours de création...

Cordialement

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
Rogério Altman
> Si vous n'avez rien touché à la gestion des noms de vos contrôles, ASP
.NET gère les noms des contrôles XHTML de façon hierarchique... Cela est
généré automatiquement et vous n'avez pas à en vous soucier...

Lorsque vous faites un MonControl.FindControl(), ASP .NET recherche un
contrôle faisant parti du même groupe que le contrôle MonControl.
Les DataList génère pour chaque Item "un groupe de contrôle".

Si vous faites FindControl("Label1") sur un Item en particulier, ASP .NET
recherchera un contrôle dont son nom est "Label1" se trouvant dans le
groupe de l'Item et non ailleurs...

En ce qui concerne votre demande pour réaliser :
"pagedetraitement.asp?image_n=<%=rs("nom_image")"

Je vous conseille d'intercepter l'événement DataList.ItemCreated :
Dans cette événement vous recherchez dans l'Item votre contrôle
"ImageButton1", et ensuite vous affectez à la propriété "PostBackUrl" de
ce contrôle votre lien "pageTraitement...". Utilisez la propriété
e.Item.DataItem pour récupéré la "ligne de donnée" attaché à l'Item en
cours de création...



Donc, si j'ai bien compris:

protected void DataList1_ItemCreated(object sender, DataListItemEventArgs e)
{
ImageButton monitem = ((ImageButton ) e.Item .FindControl ("ImageButton1"));
Label nom_image = ((Label)e.Item.FindControl("Label1"));

monitem.PostBackUrl = "Default3.aspx?id=" + nom_image .Text ;
}

Mais le contenu de nom_image ne passe pas (je ne vois pas comment utiliser
e.Item.DataItem)...


a+
Avatar
Gilles TOURREAU
Le Mon, 30 Jul 2007 12:57:42 +0200, Rogério Altman a écrit:

Si vous n'avez rien touché à la gestion des noms de vos contrôles, ASP
.NET gère les noms des contrôles XHTML de façon hierarchique... Cela est
généré automatiquement et vous n'avez pas à en vous soucier...

Lorsque vous faites un MonControl.FindControl(), ASP .NET recherche un
contrôle faisant parti du même groupe que le contrôle MonControl.
Les DataList génère pour chaque Item "un groupe de contrôle".

Si vous faites FindControl("Label1") sur un Item en particulier, ASP
.NET
recherchera un contrôle dont son nom est "Label1" se trouvant dans le
groupe de l'Item et non ailleurs...

En ce qui concerne votre demande pour réaliser :
"pagedetraitement.asp?image_n=<%=rs("nom_image")"

Je vous conseille d'intercepter l'événement DataList.ItemCreated :
Dans cette événement vous recherchez dans l'Item votre contrôle
"ImageButton1", et ensuite vous affectez à la propriété "PostBackUrl" de
ce contrôle votre lien "pageTraitement...". Utilisez la propriété
e.Item.DataItem pour récupéré la "ligne de donnée" attaché à l'Item en
cours de création...



Donc, si j'ai bien compris:

protected void DataList1_ItemCreated(object sender,
DataListItemEventArgs e)
{
ImageButton monitem = ((ImageButton ) e.Item .FindControl
("ImageButton1"));
Label nom_image = ((Label)e.Item.FindControl("Label1"));

monitem.PostBackUrl = "Default3.aspx?id=" + nom_image .Text ;
}

Mais le contenu de nom_image ne passe pas (je ne vois pas comment
utiliser
e.Item.DataItem)...


a+





Qu'elle est votre type de source de données qui alimente votre DataList ?

Cordialement

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
Dolten Altgor
>> Donc, si j'ai bien compris:
protected void DataList1_ItemCreated(object sender,
DataListItemEventArgs e)
{
ImageButton monitem = ((ImageButton ) e.Item .FindControl
("ImageButton1"));
Label nom_image = ((Label)e.Item.FindControl("Label1"));

monitem.PostBackUrl = "Default3.aspx?id=" + nom_image .Text ;
}
Mais le contenu de nom_image ne passe pas (je ne vois pas comment
utiliser
e.Item.DataItem)...





Qu'elle est votre type de source de données qui alimente votre DataList ?



Il s'agit de données qui proviennent d'une bdd sql server.
Lorsque je génère le site, les balises <asp:label> contiennent bel et bien
les données que je souhaite récupérer lorsque je clique sur l'imagebutton
correspondant.
Voici le résultat de cette génération:
...
<span id="DataList1_ctl00_Label1>12345.jpg</span>
<input type="image" name="DataList1$ctl00$ImageButon1"
id="d¤ataList1_ctl00_ImageButton1" src="image.jpg"/>
...

merci
Avatar
Gilles TOURREAU
Le Mon, 30 Jul 2007 15:43:12 +0200, Dolten Altgor a écrit:

Donc, si j'ai bien compris:
protected void DataList1_ItemCreated(object sender,
DataListItemEventArgs e)
{
ImageButton monitem = ((ImageButton ) e.Item .FindControl
("ImageButton1"));
Label nom_image = ((Label)e.Item.FindControl("Label1"));

monitem.PostBackUrl = "Default3.aspx?id=" + nom_image .Text ;
}
Mais le contenu de nom_image ne passe pas (je ne vois pas comment
utiliser
e.Item.DataItem)...





Qu'elle est votre type de source de données qui alimente votre DataList
?



Il s'agit de données qui proviennent d'une bdd sql server.
Lorsque je génère le site, les balises <asp:label> contiennent bel et
bien
les données que je souhaite récupérer lorsque je clique sur l'imagebutton
correspondant.
Voici le résultat de cette génération:
...
<span id="DataList1_ctl00_Label1>12345.jpg</span>
<input type="image" name="DataList1$ctl00$ImageButon1"
id="d¤ataList1_ctl00_ImageButton1" src="image.jpg"/>
...

merci





Excusez-moi je me suis mal exprimé...

Le résultat de la requête, vous le stocker dans quel type d'élément ? Un
DataSet/DataTable ? Un objet crée par vous même ?

Cordialement

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
Dolten Altgor
>> Il s'agit de données qui proviennent d'une bdd sql server.
Lorsque je génère le site, les balises <asp:label> contiennent bel et
bien
les données que je souhaite récupérer lorsque je clique sur l'imagebutton
correspondant.
Voici le résultat de cette génération:
...
<span id="DataList1_ctl00_Label1>12345.jpg</span>
<input type="image" name="DataList1$ctl00$ImageButon1"
id="d¤ataList1_ctl00_ImageButton1" src="image.jpg"/>



Excusez-moi je me suis mal exprimé...

Le résultat de la requête, vous le stocker dans quel type d'élément ? Un
DataSet/DataTable ? Un objet crée par vous même ?



Dans mon evenement, je cree une connexion à ma base et je lance une requete
insert, comme ceci:

"
SqlConnection maconnexion = new
SqlConnection("server=localhost;database=mabdd; Trusted_Connection=Yes");
maconnexion.Open();
SqlCommand macommande = new SqlCommand ("INSERTO INTO...", maconnexion)
macommande.ExecutennQuery();
"

merci
Avatar
Gilles TOURREAU
Le Mon, 30 Jul 2007 16:12:58 +0200, Dolten Altgor a écrit:

Il s'agit de données qui proviennent d'une bdd sql server.
Lorsque je génère le site, les balises <asp:label> contiennent bel et
bien
les données que je souhaite récupérer lorsque je clique sur
l'imagebutton
correspondant.
Voici le résultat de cette génération:
...
<span id="DataList1_ctl00_Label1>12345.jpg</span>
<input type="image" name="DataList1$ctl00$ImageButon1"
id="d¤ataList1_ctl00_ImageButton1" src="image.jpg"/>



Excusez-moi je me suis mal exprimé...

Le résultat de la requête, vous le stocker dans quel type d'élément ? Un
DataSet/DataTable ? Un objet crée par vous même ?



Dans mon evenement, je cree une connexion à ma base et je lance une
requete
insert, comme ceci:

"
SqlConnection maconnexion = new
SqlConnection("server=localhost;database=mabdd; Trusted_Connection=Yes");
maconnexion.Open();
SqlCommand macommande = new SqlCommand ("INSERTO INTO...", maconnexion)
macommande.ExecutennQuery();
"

merci





OK, mais les données de ton DataList elles proviennent bien d'un SELECT de
ta base ? Et tu le stock où ce résultat ?

Cordialemnt

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
Dolten Altgor
>> Dans mon evenement, je cree une connexion à ma base et je lance une
requete
insert, comme ceci:



SqlConnection maconnexion = new
SqlConnection("server=localhost;database=mabdd; Trusted_Connection=Yes");
maconnexion.Open();
SqlCommand macommande = new SqlCommand ("INSERTO INTO...", maconnexion)
macommande.ExecutennQuery();



OK, mais les données de ton DataList elles proviennent bien d'un SELECT de
ta base ? Et tu le stock où ce résultat ?



Oui, dans le Page_Load de la page je fais une requete SQL avec un
sqldatadapter et un dataset, comme suit:

SqlConnection("server=localhost;database=mabdd; Trusted_Connection=Yes");
SqlDataAdapter macommande = new SqlDataAdapter ("SELECT...");
DataSet DS = new DataSet();
macommande.fill (DS, "images");
1 2 3