Ciao,
potresti risolvere usando questi due eventi dell'oggetto Repeater:
codice:
OnItemDataBound
OnItemCommand
Ti spiego di seguito una possibilità per ottenere il funzionamento desiderato.
Ogni Button ha due attributi:
codice:
CommandName
CommandArgument
CommandName impostalo a "SalvaDati",
A Command argument invece assegna un valore differente ad ogni sua istanza ( quindi ad ogni riga, ad esempio un ID ( se salvi nel db devi usare per forza una qualche chiave, e il valore della chiave potrebbe andare bene)
Per fare questo usi l'evento OnItemDataBound. La funzione sottoscritta a questo evento viene chiamata per ogni elemento bindato al repeater ( compreso Header e Footer).
Avrai una cosa del genere quindi:
codice:
protected void MyRepater_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
if ((e.Item != null) && ((e.Item.ItemType == ListItemType.Item)) || (e.Item.ItemType == ListItemType.AlternatingItem))
{
if ((e.Item != null) && ((e.Item.ItemType == ListItemType.Item)) || (e.Item.ItemType == ListItemType.AlternatingItem))
{
((Button)e.Item.FindControl("MyButton")).CommandArgument = //valore univoco che assegni
}
}
}
Fatto questo,
sottoscrivi una funzione all'evento OnItemCommand.
Questo evento viene chiamato quando viene eseguito un comando sul repeater ( in questo caso la pressione del bottone alla n-esima riga).
Dentro la funzione quindi farai un check su CommandArgument e CommandName e in questo modo dovresti essere in grado di estrarre tutti i dati che ti servono.
codice:
protected void MyRepeater_OnItemCommand(object sender, RepeaterCommandEventArgs e)
{
if (e.CommandName == "SalvaDati")
{
object oMyPrimaryKey = e.CommandArgument;
}
}
Spero che sia tutto chiaro.
Ciao