LinkButton dynamique + evenement

yanis7518 Messages postés 283 Date d'inscription mercredi 7 décembre 2005 Statut Membre Dernière intervention 9 juillet 2010 - 5 juil. 2007 à 17:31
ruijja Messages postés 2 Date d'inscription jeudi 13 mars 2008 Statut Membre Dernière intervention 10 juin 2008 - 10 juin 2008 à 11:00
Salut a tous

j'ai un linkbutton qui est créé lors du Page_Init (jusque la tout va bien )

je l'abonne a l'evenement Click de cette manière :

lnk.Click +=

new
EventHandler(lnk_Click);

Cependant lorque je clik sur le linkButton j'ai bien un postback mais il ne se passe rien et je ne passe jamais dans l'evenement.

vous pourriez m'aider SVP???

10 réponses

jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
6 juil. 2007 à 13:50
Bonjour,

Ce problème est assez classique, je te conseille de regarder ici : http://weblogs.asp.net/infinitiesloop/archive/2006/08/25/TRULY-Understanding-Dynamic-Controls-_2800_Part-1_2900_.aspx

Rajoutes tu le controle à chaque postback ? (pas dans le !Page.IsPostBack) ? as tu bien définit un id à ton linkbutton ? l'ajoute tu dans la meme hierarchie de controles après le postback ?

<hr />Cyril - MSP - MCTS ASP.net & SQL
0
yanis7518 Messages postés 283 Date d'inscription mercredi 7 décembre 2005 Statut Membre Dernière intervention 9 juillet 2010 3
9 juil. 2007 à 11:33
le LinkButton est créé dans le Page_Init à chaque Postback
un Id est bien définit voila le code :



<hr />





code dans le test.aspx.cs

protected






void
Page_Init(

object
sender,

EventArgs
e){


int
nd = 12







for
(

int
i = 1; i <= nd; i++){

Session[


"toto"
] = 12







ClassUtility
.BuildDiskTabs(i, (

int
)Session[

"toto"
], TabContainer1);}

}

//fonction qui se trouve dans un .cs dans le APP_CODE

public





static



void
BuildDiskTabs(

int
num,

int
val,

TabContainer
TmpTabContainer){


TabPanel
tb =

new
AjaxControlToolkit.

TabPanel
();tb.ID =


"TabPanel"
+ num.ToString();tb.HeaderText =


"Disk n°"
+ num.ToString();tb.Width =


Unit
.Percentage(100);tb.Font.Name =


"Verdana"
;tb.Font.Bold =


true
;tb.ForeColor = System.Drawing.


Color
.Red;


for
(

int
i = 1; i < val + 1; i++){



#region
TextBox











TextBox
txtbox =

new



TextBox
();txtbox.AutoCompleteType =


AutoCompleteType
.None;txtbox.Attributes[


"runat"
] =

"server"
;txtbox.Width =


Unit
.Percentage(65);txtbox.ID =


"Txtbox"
+ i.ToString();


#region



Ajout Controls


//Ajout des contrôles dans le tabpanel











tb.Controls.Add(txtboxTrk);tb.Controls.Add(

new
LiteralControl(
"
"));
#endregion

txtbox.Dispose();

}

#region

LinkButton

//Ajout d'un LinkButton

LinkButton lnk =
newLinkButton();lnk.ID "LnkBtn" + num.ToString();lnk.ForeColor System.Drawing.
Color.Black;lnk.Font.Underline false;lnk.Font.Italic
true;lnk.Text "<------------------------------ Ajouter une textbox ------------------------------>";lnk.Width

Unit.Percentage(65);lnk.Click +=

new
EventHandler(lnk_Click);
#endregion

tb.Controls.Add(lnk);tb.Controls.Add(new
LiteralControl(
"
"));

tb.Controls.Add(new
LiteralControl(
"
"));

lnk.Dispose();

//ajout du tabpanel dans le tabcontainer

TmpTabContainer.Controls.Add(tb);

if (nb == 1){

TmpTabContainer.ActiveTab = tb;

}

tb.Dispose();

}
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
9 juil. 2007 à 17:43
Supprime le static dans ta méthode
public static void BuildDiskTabs( int num, int val, TabContainer TmpTabContainer)

Et maintenant

lnk.Click += new EventHandler(lnk_Click);

Fonctionne bien controlé avec :

protected void lnk_Click(object sender, EventArgs e)
{
Label1.Text = (sender as LinkButton).ID;
}
0
yanis7518 Messages postés 283 Date d'inscription mercredi 7 décembre 2005 Statut Membre Dernière intervention 9 juillet 2010 3
10 juil. 2007 à 10:03
j'ai fais les modification que tu m'a dis et j'ai toujours rien.

j'ai mis le buildDisktabs dans le fichier aspx.cs et aucun résultat.

je comprend pas pourquoi ça marche toujours pas.
0

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

Posez votre question
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
10 juil. 2007 à 10:57
As-tu enlever le static et le nom de la classe dans ton appel

Tu colles dans ta page test.aspx.cs

dans ton page load :

BuildDiskTabs(i, ( int )Session[ "toto" ], TabContainer1)

appel de la méthode :

public void BuildDiskTabs( int num, int val, TabContainer TmpTabContainer)

Ca fonctionne chez moi,
Quelle est ton message d'erreur ?
0
yanis7518 Messages postés 283 Date d'inscription mercredi 7 décembre 2005 Statut Membre Dernière intervention 9 juillet 2010 3
10 juil. 2007 à 11:11
lorsque je met BuildDiskTabs(i, ( int )Session[ "toto" ], TabContainer1) dans le PageLoad j'ai l'erreur suivante :
Sys.ArgumentoutOfRangeException: Specified argument was out of range of valid values.
Parameter name: value.
0
yanis7518 Messages postés 283 Date d'inscription mercredi 7 décembre 2005 Statut Membre Dernière intervention 9 juillet 2010 3
10 juil. 2007 à 11:18
désolé je me suis trompé en fait voila l'erreur que j'ai en cliquant sur le LinkButton

L'exception System.ArgumentOutOfRangeException n'a pas été gérée par le code utilisateur
  Message="L'argument spécifié n'était pas dans les limites de la plage des valeurs valides.\r\nNom du paramètre : index"
  Source="System.Web"
  ParamName="index"
  StackTrace:
       à System.Web.UI.ControlCollection.get_Item(Int32 index)
       à AjaxControlToolkit.TabPanelCollection.get_Item(Int32 index) dans d:\E\AjaxControlToolkit\Release\AjaxControlToolkit\Tabs\TabPanelCollection.cs:ligne 49
       à AjaxControlToolkit.TabContainer.LoadClientState(String clientState) dans d:\E\AjaxControlToolkit\Release\AjaxControlToolkit\Tabs\TabContainer.cs:ligne 305
       à AjaxControlToolkit.ScriptControlBase.LoadPostData(String postDataKey, NameValueCollection postCollection) dans d:\E\AjaxControlToolkit\Release\AjaxControlToolkit\ExtenderBase\ScriptControlBase.cs:ligne 290
       à AjaxControlToolkit.TabContainer.LoadPostData(String postDataKey, NameValueCollection postCollection) dans d:\E\AjaxControlToolkit\Release\AjaxControlToolkit\Tabs\TabContainer.cs:ligne 396
       à AjaxControlToolkit.ScriptControlBase.System.Web.UI.IPostBackDataHandler.LoadPostData(String postDataKey, NameValueCollection postCollection) dans d:\E\AjaxControlToolkit\Release\AjaxControlToolkit\ExtenderBase\ScriptControlBase.cs:ligne 393
       à System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad)
       à System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
0
yanis7518 Messages postés 283 Date d'inscription mercredi 7 décembre 2005 Statut Membre Dernière intervention 9 juillet 2010 3
10 juil. 2007 à 11:45
j'avais deja eu ce problème et pour le resoudre il faut mettre BuildDiskTabs(i, ( int )Session[ "toto" ], TabContainer1) dans le Page_Init
donc lorsque je remet le code dans le Page_Init il ne se passe rien aucune erreur
0
yanis7518 Messages postés 283 Date d'inscription mercredi 7 décembre 2005 Statut Membre Dernière intervention 9 juillet 2010 3
10 juil. 2007 à 14:49
j'ai comparer la source de la page web obtenue. Voila ce que cela donne

- source d'un linkbutton créer depuis l'IDE

<a id="ctl00_CPH_Users_lnk" href="javascript:__doPostBack('ctl00$CPH_Users$lnk','')"

- source d'un linkbutton créer dynamiquement

<a id="ctl00_CPH_Users_TabContainer1_TabPanel1_LnkBtn1" href="javascript:__doPostBack('ctl00$CPH_Users$TabContainer1$TabPanel1$LnkBtn1','')"
0
ruijja Messages postés 2 Date d'inscription jeudi 13 mars 2008 Statut Membre Dernière intervention 10 juin 2008
10 juin 2008 à 11:00
Salut tout le monde

Voila j'ai un probleme et je sais pas d'ou ca vient puisque le mm pmethode marche sur un autre projet voila l'erreur:  
 Erreur du serveur dans l'application '/Datagrid'.
<hr width= "100%" color="silver" size="1" />
L'argument spécifié n'était pas dans les limites de la plage des valeurs valides. Nom du paramètre : index
Description : Une exception non gérée s'est produite au moment de l'exécution de la demande Web actuelle. Contrôlez la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

Détails de l'exception: System.ArgumentOutOfRangeException: L'argument spécifié n'était pas dans les limites de la plage des valeurs valides. Nom du paramètre : index

Erreur source:

Ligne 144 :        bindin()
Ligne 145 :        Dim r As DataRow   = Me.DataSet11.Tables("Consomation").Rows(e.Item.DataSetIndex)
Ligne 146 :        r.Item(2) = CType(e.Item.Cells(2).Controls(0), TextBox).Text
Ligne 147 :        r.Item(3) = CType(e.Item.Cells(3).Controls(0), TextBox).Text
Ligne 148 :        r.Item(4) = CType(e.Item.Cells(4).Controls(0), TextBox).Text



et voila la methode puisqu'il s'agit d'une modifcation dans le datagrid :
Public

Class WebForm1

Inherits System.Web.UI.Page

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

'Placez ici le code utilisateur pour initialiser la page

If
Not IsPostBack
Thenbindin()

End
If

End
Sub

Sub bindin()

Me.SqlDataAdapter1.Fill(
Me.DataSet11, "Consomation")

Me.DataGrid1.DataBind()

End
Sub

Private
Sub DataGrid1_CancelCommand(
ByVal source
As
Object,
ByVal e
As System.Web.UI.WebControls.DataGridCommandEventArgs)
Handles DataGrid1.CancelCommandDataGrid1.EditItemIndex = -1

bindin()

End
Sub

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

Me.DataGrid1.EditItemIndex = e.Item.ItemIndexbindin()

End
Sub

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

Me.DataSet11.Consomation.Rows(e.Item.ItemIndex).Delete()

Me.SqlDataAdapter1.Update(
Me.DataSet11, "Consomation")
bindin()

End
Sub

Private
Sub DataGrid1_PageIndexChanged(
ByVal source
As
Object,
ByVal e
As System.Web.UI.WebControls.DataGridPageChangedEventArgs)
Handles DataGrid1.PageIndexChanged

Me.DataGrid1.CurrentPageIndex = e.NewPageIndexbindin()

DataSet11.Dispose()

End
Sub

Et c'est la que ca me donne l'erreur
Private
Sub DataGrid1_UpdateCommand(
ByVal source
As
Object,
ByVal e
As System.Web.UI.WebControls.DataGridCommandEventArgs)
Handles DataGrid1.UpdateCommand

Me.DataGrid1.EditItemIndex = -1bindin()

Dim r As DataRow Me.DataSet11.Tables("Consomation").Rows(e.Item.DataSetIndex)r.Item(2)
CType(e.Item.Cells(2).Controls(0), TextBox).Textr.Item(3) CType(e.Item.Cells(3).Controls(0), TextBox).Textr.Item(4)
CType(e.Item.Cells(4).Controls(0), TextBox).Textr.Item(5) CType(e.Item.Cells(5).Controls(0), TextBox).Textr.Item(6)

CDate(
CType(e.Item.Cells(5).Controls(0), TextBox).Text)

Me.SqlDataAdapter1.Update(
Me.DataSet11, "Consomation")bindin()

End
SubEnd

Class

Merci
0
Rejoignez-nous