Si deve richiamare il metodo FindControl sull’oggetto GridViewRow che rappresenta la riga corrente della GridView. Supponiamo di avere una GridView definita come segue:
<asp:GridView ID="GridView1" runat="server" AutoGenerateSelectButton="True" AutoGenerateColumns="false"
OnSelectedIndexChanging="GridView1_SelectedIndexChanging">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="lblNome" runat="server" Text='<%# Eval("Name") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
protected void Page_Load(object sender, EventArgs e)
{
List<Person> list = new List<Person>();
Person p = new Person(); p.Name = "Marco";
Person p2 = new Person(); p2.Name = "Andrea";
list.Add(p);
list.Add(p2);
GridView1.DataSource = list;
GridView1.DataBind();
}
Nella routine GridView1_SelectedIndexChanging scriviamo il codice per recuperare il riferimento al controllo Label associato alla riga corrente:
protected void GridView1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
{
Label lbl = (Label)GridView1.Rows[e.NewSelectedIndex].FindControl("lblNome");
Response.Write("Hai selezionato il nome " + lbl.Text);
}
Con l’istruzione GridView1.Rows[e.NewSelectedIndex] otteniamo il GridViewRow di posizione e.NewSelectedIndex, quindi su di esso richiamiamo il metodo FindControl, passandogli come argomento il nome dell’oggetto (così come è stato definito nel template della GridView).