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
).