Stavo paciugando con il LoadTemplate per caricare dei template dinamici all'interno di TemplateColumn create dinamicamente, e mi sono trovato di fronte al problema di dover prendere l'istanza di un oggetto (checkbox, textbox) definito nel template per variarne il valore.
Sembrava tutto facile, ma mi sono dimenticato che il mero FindControl() non funziona perchè, per ogni templatecolumn caricata in questo modo, viene creata una tableCell contenente un oggetto di tipo ASP_NomeFileTemplate_Ascx con all'interno le istanze degli eventuali controlli.
Per avere l'istanza della textbox posso risolvere in due modi: ho controllo che il tipo corrisponda con quello sopra definito, e dopo chiamo unfindcontrol per l'istanza della textbox

Type t = Type.GetType("ASP_NomeFileTemplate_Ascx");
foreach (Control ctrl in e.Item.Cells[2].Controls)
{
  if (ctrl.GetType() == t)
  {
     TextBox txt = (TextBox)ctrl.FindControl("txt");
  }
}

che però mi fa un po schifo ed è anche un po lento.
In alternativa, posso fidarmi del fatto che per ogni template column caricata in questa maniera io posso avere _uno ed un solo_ template associato, quindi un solo oggetto di tipo ASP_NomeFileTemplate_Ascx per cella.
Detto fatto, la soluzione migliore è andare direttamente di indici e poi fare un FindControl solo per avere l'istanza della textbox:

TextBox txt = (TextBox)e.Item.Cells[2].Controls[0].FindControl("txt");

Che dite, avete qualche altra idea?