Update panel dans repeater [Résolu]

Messages postés
13
Date d'inscription
jeudi 6 avril 2006
Dernière intervention
21 mars 2008
- - Dernière réponse : jesusonline
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Dernière intervention
13 octobre 2010
- 9 déc. 2007 à 19:53
Bonjour,

alors j'ai un petit probleme avec mon appli web. Je travaille avec le framework 2.0 sous visual studio 2005.
J'ai un écran qui affiche un repeater avec des données récupérées de ma base oracle. Dans ce repeater j'affiche un tableau, et une des colonnes contient un textbox et deux boutons, l'un permettant d'incrémenter la valeur numérique afficher dans le textbox de 1, et l'autre permettant de décrémenter la valeur. Tout cela fonctionne parfaitement bien, mais a chaque click sur l'un des boutons, c'est toute la page qui se rafraichit, et c'a fait un peu mal aux yeux a force :D.
Je souhaitais donc que le click sur mon bouton ne me rafraichisse que mon text box. Pour cela je me suis tourné vers ajax et l'update panel qui me semblait etre une bonne solution, sauf qu'au sein de mon repeater, ca ne fonctionne pas!
1-Ma premiere question est donc toute simple, est-ce possible d'intégrer un update panel dans un repeater? Et si oui, avez vous un exemple? ou si non, existe-t-il un autre moyen de ne raffraichir que mon textbox?
Ensuite j'ai une autre question concernant ajax plus généralement.
2-Mon projet est un projet asp.net site web classic, est-ce que je peux en ajoutant les composants ajax utilisé du ajax dans mon code, ou dois-je forcement créer un projet asp.net ajax-enabled website ?
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
13
Date d'inscription
jeudi 6 avril 2006
Dernière intervention
21 mars 2008
3
Merci
Yo!

en fait j'ai trouvé la réponse moi même
Je placais mal l'updatePanel, j'ai fait l'erreur de vouloir le mettre autour du champs a mettre a jour alors qu'en fait il fallait le mettre autour du repeater.
Donc en gros il faut faire:

<ContentTemplate
>
<fieldset>

<asp:Repeater
ID="rptClasses"
runat="server"
OnItemCommand="rptClassesItemCommand"
EnableViewState="false">
<HeaderTemplate>

...........
</HeaderTemplate>
<ItemTemplate>
..........
</ItemTemplate>
<AlternatingItemTemplate>
..........
</AlternatingItemTemplate>
</asp:Repeater>
</fieldset>
</ContentTemplate>
</asp:UpdatePanel>

et ca fonctionne !!!

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 104 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_rastali
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Dernière intervention
13 octobre 2010
0
Merci
Bonjour,

1. Oui, c'est possible ! Mais faut binder correctement ou utiliser le viewstate, comment bind tu ton repeater ? utilises tu le viewstate ? as tu un message d'erreur ? que se passe t'il actuellement ?

2. Un site web ASP.net Ajax Enabled n'est rien d'autre qu'un site web classique avec un web.config un poil modifié :-)

<hr />Cyril - MSP - MCPD ASP.net & MCTS SQL - Consultant indépendant
Commenter la réponse de jesusonline
Messages postés
13
Date d'inscription
jeudi 6 avril 2006
Dernière intervention
21 mars 2008
0
Merci
salut, et merci de ta réponse ^^
alors pour la question 2, c'est bon j'ai réussi a adapter mon web.config en m'inspirant d'un web.config d'un projet ajax. J'arrive donc sur une page de test, et sans repeater, à mettre a jour uniquement mon textbox.
Par contre, avec le repeater j'ai un probleme, directement a la compilation :s .

donc mon code aspx:

<

asp:Repeater
ID="rptClasses"
runat="server"
OnItemCommand="rptClassesItemCommand"
EnableViewState="false">
<HeaderTemplate>

<table
style="border-collapse:collapse; background-color:#BBBBBB;">
<tr>
<td
style="border:1px solid #000000; width:100px"><b>Code
</b></td>
<td
style="border:1px solid #000000; width:100px"><b>Description
</b></td>
<td
style="border:1px solid #000000; width:120px"><b>Valeur</b></td>
</tr>
</table>

</HeaderTemplate>
<ItemTemplate>
<table
style="border-collapse:collapse; background-color:#fbfcfd;">
<tr>
<td
style="border:1px solid #000000; width:100px"><center><asp:Label
ID="lblCode"
runat="server"
Text='<%# DataBinder.Eval(Container.DataItem, "CODE") %>
'></asp:Label></center></td>
<td
style="border:1px solid #000000; width:100px"><asp:Label
ID="lblDescription"
runat="server"
Text='<%# DataBinder.Eval(Container.DataItem, "DESCRIPTION") %>
'></asp:Label></td>
<td
style="border:1px solid #000000; width:120px">
<asp:UpdatePanel
ID="UP1"
runat="server">

<ContentTemplate>
<fieldset>
<asp:TextBox
runat="server"
ID="tbValeur"
Width="50"
Text='<%# DataBinder.Eval(Container.DataItem, "Valeur") %>
'></asp:TextBox>
<asp:Button
id="btnPlus"
runat="server"
CommandName='<%# ACTIONPLUS %>
'
CommandArgument='<%# DataBinder.Eval(Container.DataItem, "CODE") %>
'
Text="+"
/>
<asp:Button
id="btnMoins"
runat="server"
CommandName='<%# ACTIONMOINS %>
'
CommandArgument='<%# DataBinder.Eval(Container.DataItem, "CODE") %>
'
Text="-"
/>
</fieldset>
</ContentTemplate>
</asp:UpdatePanel>
</td>
</tr>
</table>
</ItemTemplate>
<AlternatingItemTemplate>
<table
style="border-collapse:collapse; background-color:#d7e4ed;">
<tr>
<tdstyle="border:1px solid #000000; width:100px"><center><asp:LabelID="lblCode"runat="server"Text='<%# DataBinder.Eval(Container.DataItem, "CODE") %>'></asp:Label></center></td>
<tdstyle="border:1px solid #000000; width:100px"><asp:LabelID="lblDescription"runat="server"Text='<%# DataBinder.Eval(Container.DataItem, "DESCRIPTION") %>'></asp:Label></td>
<tdstyle="border:1px solid #000000; width:120px">
<asp:UpdatePanelID="UP1"runat="server">
<ContentTemplate>
<fieldset>
<asp:TextBoxrunat="server"ID="tbValeur"Width="50"Text='<%# DataBinder.Eval(Container.DataItem, "Valeur") %>'></asp:TextBox>
<asp:Buttonid="btnPlus"runat="server"CommandName='<%# ACTIONPLUS %>'CommandArgument='<%# DataBinder.Eval(Container.DataItem, "CODE") %>'Text="+"/>
<asp:Buttonid="btnMoins"runat="server"CommandName='<%# ACTIONMOINS %>'CommandArgument='<%# DataBinder.Eval(Container.DataItem, "CODE") %>'Text="-"/>
</fieldset>
</ContentTemplate>
</asp:UpdatePanel>
</td>
</tr>
</table>
</AlternatingItemTemplate>
</asp:Repeater>

et mon code cs:

private
void InitRptClasses()
{

try
{

//on recupere les donn‚es de la base
DataTable DtClasses=
new
DataTable();

DtClasses=
ClsClasse.SelectClasse().Tables[0];

//alimentation du repeater
rptClasses.DataSource = DtClasses;
rptClasses.DataBind();
}

catch (
Exception ex)
{

Util.Log(
"Erreur : InitRptClasses : " + ex.Message);
}
}

public
void rptClassesItemCommand(
object source, System.Web.UI.WebControls.
RepeaterCommandEventArgs e)
{

string code = e.CommandArgument.ToString();

if (e.CommandName == ACTIONPLUS)
{
ValeurPlus(code);
}

if (e.CommandName == ACTIONMOINS)
{
ValeurMoins(code);
}
}

private
void ValeurPlus(
string baumuster6)
{

try
{

foreach (
RepeaterItem Item
in rptClasses.Items)
{

if (((
Label)Item.FindControl(
"lblCode")).Text.ToString() == code)
{

TextBoxtbValeur= (
TextBox)Item.FindControl(
"tbValeur");

if (tbValeur.Text !=
"")
{

if (IsDouble(tbValeur.Text))
{

Double valeur=
Convert.ToDouble(tbValeur.Text) + 0.5;
tbValeur.Text = valeur.ToString();
}
}
}
}
}

catch (
Exception ex)
{

Util.Log("ValeurPlus : "+ ex.Message);
}
}La fonction ValeurMoins est identique à ValeurPlus mais elle soustrait 0,5.
Commenter la réponse de cs_rastali
Messages postés
13
Date d'inscription
jeudi 6 avril 2006
Dernière intervention
21 mars 2008
0
Merci
Ah et j'ai oublié les messages d'erreur, donc lors de la compilation j'ai ces erreurs:

Le type 'Page1' contient déjà une définition pour 'tbValeur'
Le type 'Page1' contient déjà une définition pour 'btnPlus'  
Le type 'Page1' contient déjà une définition pour 'btnMoins' 
Le type 'ASP.page1_aspx' définit déjà un membre appelé '__BuildControltbValeur' avec les mêmes types de paramètres 
Le type 'ASP.page1_aspx' définit déjà un membre appelé '__DataBindingtbValeur' avec les mêmes types de paramètres 
Le type 'ASP.page1_aspx' définit déjà un membre appelé '__BuildControlbtnPlus' avec les mêmes types de paramètres 
Le type 'ASP.page1_aspx' définit déjà un membre appelé '__DataBindingbtnPlus' avec les mêmes types de paramètres 
Le type 'ASP.page1_aspx' définit déjà un membre appelé '__BuildControlbtnMoins' avec les mêmes types de paramètres  
Le type 'ASP.page1_aspx' définit déjà un membre appelé '__DataBindingbtnMoins' avec les mêmes types de paramètres 

Et si je retire le alternatinItemTemplate, j'ai ces messages d'erreurs:

'System.Web.UI.Control' ne contient pas de définition pour 'DataItem' 
'System.Web.UI.Control' ne contient pas de définition pour 'DataItem' 
'System.Web.UI.Control' ne contient pas de définition pour 'DataItem' 

correspondant aux lignes des elements contenus dans l'update panel, a savoir le textbox et les deux boutons.
Commenter la réponse de cs_rastali
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Dernière intervention
13 octobre 2010
0
Merci
Bonjour,

en mettant ton updatepanel autour de ton repeater, tu vas rafraichir tous le repeater et pas seulement un item. A mon avis le problème que tu as vient des id de tes controles, il semble que tu as des id dupliqués pour 2 textbox différentes.

J'ai déjà mis des updatepanels dans une itemtemplate de repeater et il n'y a pas de problème, il faut juste faire attention à bien reconstruire les items comme il faut si on le construit de facon peu orthodoxe ;-)

<hr />Cyril - MSP - MCPD ASP.net & MCTS SQL - Consultant indépendant
Commenter la réponse de jesusonline

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.