Alle righe della datagrid sono associabili bottoni/linkbutton ai quali è associabile un comando, ma le ButtomColumn hanno il CommandName ma non il CommandArgument. L'evento di ItemCommand, associato al _click_ di una ButtonColumn, nasce per avere sia CommandName sia CommandArgument. Sarebbe comodo usare il CommandArgument per avere l'identificativo del record associato all'Item selezionato ma tutti gli esempi dell'MSDN portano il caso in cui tale identificativo è mappato su una colonna della griglia... ma mica è sempre così! Se l'identificativo è - esempio - un Guid cosa gli frega all'utente di avere una colonna tanto lunga e tanto incomprensibile?
Io faccio come segue:
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
DataRowView drv = (DataRowView) e.Item.DataItem;
((LinkButton) e.Item.Cells[1].Controls[0]).CommandArgument = drv["ID"].ToString();
}
private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
switch(e.CommandName)
{
case "UnComandoACaso":
int id = Convert.ToInt32(e.CommandArgument.ToString()); //Conversione della stringa nel tipo specifico dell'identificativo.
//TODO: codice per _puffare_ l'elemento selezionato.
break;
}
}
}
Controindicazioni?