non ha senso ogni controllo è legato a un padre e ci puoi accedere attraverso le collection Controls, quindi per intenderci Page.Controls ti restituisce un po' le varie referenze agli oggetti, Form.Controls stessa cosa ma già più corretta nelle pagine asp perchè ti evita di ciclare su oggetti inutili, secondo me se fai nomeFormView.Controls.
Ho creato un piccolo esempio per farti capire. Nella pagina aspx scrivi:
<asp:Label ID="fuori" runat="server" Text="Sono fuori"></asp:Label>
<asp:FormView ID="fv" runat="server">
<ItemTemplate>
<asp:Label ID="trovami" runat="server" Text='<%# Eval("testo") %>">
</asp:Label>
</ItemTemplate>
</asp:FormView>
e nell'evento page_load scrivi:
foreach (Control c in Form.Controls)
if (c is Label)
if (c.ID == "fuori")
{
string testo = ((Label)c).Text;
//fa quello che ti pare con l'etichetta fuori dal form view
}
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("testo"));
dt.AcceptChanges();
DataRow dr = dt.NewRow();
dr[0] = "sono dentro al form view";
dt.Rows.Add(dr);
dt.AcceptChanges();
fv.DataSource = dt;
fv.DataBind();
try
{
string testoInterno = ((Label)fv.Row.FindControl("trovami")).Text;
}
catch { }
se metti il break alla terz'ultima riga e schiacci f10 quando arrivi li nel debug vedi che hai il testo che cerchi, il codice è abbastanza intuitivo e ti aiuta di sicuro poi fammi sapere se qualcosa non la capisci.