Jag vill loopa igenom alla linkbuttons som ligger i en panel
sedan vill jag anropa funktionerna som hanterar clickeventen på dessa.
Hur gör man det?
För att hitta alla listbuttons använder jag mig av, vilket inte är något konstigt alls.
foreach (Control c in p.Controls)
{
if (c is System.Web.UI.WebControls.LinkButton)
{
}
}
GladhMedlem sedan maj 20012 812 inlägg Du skulle kunna lösa det med reflextions och på så sätt kalla en metod genom att skicka med namnet på methoden.
Det finns dock ett snyggare alternativ eftersom du vill komma åt ett clickevent och det är att du helt enkelt "reser ett klickevent" på just denna knapp.
foreach (Control c in p.Controls)
{
if (c is System.Web.UI.WebControls.LinkButton)
{
((LinkButton)c).OnClick();
}
}
Om nu eventet heter så, det har jag ingen anning om, men det visas garanterat i Intellisen med en lite blixt framför.
- Magnus
Men vad jag förstår så kan man bara skapa ett nytt event på det sättet. inte anropa ett redan skapat event.
Finns bara med click och med en liten blixt.. men där kan jag bara skapa eller ta bort event..
Marcus EMedlem sedan maj 20021 466 inlägg Det går inte eftersom det inte finns någon PerformClick-funktion.
Du får ärva LinkButton eller lösa det på ett annat sätt.
DinoMedlem sedan sep. 20011 914 inlägg Det mesta går.
<form runat="server">
<asp:panel id="pnlControls" runat="server">
<asp:textbox id="tbRaiseEvent" text="false" runat="server" />
<input value="Klicka på mig" type="button" onclick="document.getElementById('tbRaiseEvent').value = 'true'; __doPostBack('hpGrr','');" />
<asp:linkbutton id="hpGrr" runat="server" />
<asp:button id="btOne" text="One" runat="server" />
<asp:button id="btTwo" text="Two" runat="server" />
<asp:button id="btThree" text="Three" runat="server" />
<asp:button id="btFour" text="Four" runat="server" />
<asp:button id="btFive" text="Five" runat="server" />
</asp:panel>
</form>
public class RaiseEventFromCodeBehind : System.Web.UI.Page
{
protected Button btZero, btOne, btTwo, btThree, btFour, btFive;
protected Panel pnlControls;
protected TextBox tbRaiseEvent;
private void Page_Load(object sender, System.EventArgs e)
{
if(bool.Parse(tbRaiseEvent.Text))
RaiseEvent();
}
private void RaiseEvent()
{
foreach (Control c in pnlControls.Controls)
{
if (c is System.Web.UI.WebControls.Button)
{
this.RaisePostBackEvent((IPostBackEventHandler)c, "");
}
}
}
private void btOne_Click(object sender, System.EventArgs e)
{
Response.Write("1");
}
private void btTwo_Click(object sender, System.EventArgs e)
{
Response.Write("2");
}
private void btThree_Click(object sender, System.EventArgs e)
{
Response.Write("3");
}
private void btFour_Click(object sender, System.EventArgs e)
{
Response.Write("4");
}
private void btFive_Click(object sender, System.EventArgs e)
{
Response.Write("5");
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
this.btOne.Click += new EventHandler(this.btOne_Click);
this.btTwo.Click += new EventHandler(this.btTwo_Click);
this.btThree.Click += new EventHandler(this.btThree_Click);
this.btFour.Click += new EventHandler(this.btFour_Click);
this.btFive.Click += new EventHandler(this.btFive_Click);
}
#endregion
}
Tack.. fungerade perfekt.