2010-10-28 9 views
13

Sto costruendo un LinkButton dal mio codebehind, e ho bisogno di assegnare il onclick a un metodo e passare anche un parametro con esso. Ho questo finora:Impostazione evento OnClick di LinkButton per il metodo in codebehind

LinkButton lnkdel = new LinkButton(); 
lnkdel.Text = "Delete"; 

Il metodo che voglio passarlo a assomiglia a questo:

protected void delline(string id) 
     { 

     } 

risposta

31

Beh, non puoi passarlo a quello metodo, è necessario assegnare l'evento click delegato a un metodo in grado di gestirlo.

Ti piace questa:

public void DynamicClick(object sender, EventArgs e) { 
    // do something 
} 

assegnare l'evento click come un qualsiasi evento:

lnkdel.Click += new EventHandler(DynamicClick); 

Se si desidera passare un argomento, utilizzare CommandArgument, e avrete bisogno di un delegato diverso :

void DynamicCommand(Object sender, CommandEventArgs e) 
     { 
     Label1.Text = "You chose: " + e.CommandName + " Item " + e.CommandArgument; 
     } 

E quindi:

lnkDel.Command += new CommandEventHandler(DynamicCommand) 
lnkDel.CommandArgument = 1234; 

BTW, se siete su> = C# 3, è possibile utilizzare anche il fresco della metodi anonimi:

lnkDel.Command += (s, e) => { 
    Label1.Text = "You chose: " + e.CommandName + " Item " + e.CommandArgument; 
}; 
+0

Grazie amico, sto cercando di utilizzare il secondo metodo si postato come lo scopo è il post è quello di passare un ID attraverso per la cancellazione. .OnCommand non compare nell'elenco intellisense, e quando provo a scriverlo lo stesso mi dice che il LinkButton è inaccessibile a causa del suo livello di protezione? – Chris

+1

@Chris - sì, ho dimenticato "bug/funzionalità" con linkbutton. prova questo: 'lnkDel.Command + = new CommandEventHandler (DynamicCommand)' o semplicemente 'lnkDel.Command + = DynamicCommand'. – RPM1984

+0

Grazie amico, compila ma non sembra mai andare al comando - mi manca qualcosa? Ho provato anche il metodo C# 3, che compila ma ancora non si addentra mai in quel metodo – Chris

1

Il prototipo di funzione per questo evento è:

protected void lnkdel_OnClick(object _sender, EventArgs _args) 
{ 
    LinkButton src = (LinkButton)_sender; 
    // do something here... 
} 

assegnarlo con :

LinkButton lnkdel = new LinkButton(); 
lnkdel.Text = "Delete"; 
lnkdel.OnClick += new EventHandler(lnkdel_OnClick);