>1) gestire la RowCommand
Un modo è associare ad un qualsiasi controllo all'interno della tua GridView, l'attributo "CommandName"
<asp:Button runat=server ID=btnSubmit Text="Save" CommandName="Update" />
Attenzione che alcuni nomi (Update, Sort, Cancel, Edit, Select..) sono di sistema, ovvero li puoi utilizzare tranquillamente ma generano altri eventi esposti dalla GridView. Puoi tranquillamente inserire "Update" o "Salva".
>2) fare uno switch sul tuo comando di update
protected void gv1_RowCommand(object sender, GridViewCommandEventArgs e)
{
switch (e.CommandName)
{
case "Salva":
{
}
break;
}
}
>3) recuperare l'istanza controllo che ha generato l'evento e
>quindi risalire alla riga di edit
GridViewRow rowInEditing = ((GridViewRow)((Button)sender).Parent.Parent);
Questo è solo un modo. Se vogliamo il più "strutturale" che ti fa capire come dal sender (il tuo button Salva) risali al primo parent (una GridViewCell) e poi al secondo parent, una GridViewRow. Quello che hai fatto è letteralmente recuperare la riga della Griglia in cui è stato premuto il pulsante Salva.
Un altro modo è accedere direttamente alla riga in stato "Edit"
GridViewRow rowInEditing = gv1.Rows[gv1.EditIndex];
questo modo però funziona solo se all'edit ci sei arrivato mediante la pressione su un pulsante con command name "Edit".
>4) recuperare i valori di tutti i controlli compilati dall'utente
TextBox txtUnaTextBoxModificata = (TextBox)rowInEditing.FindControl("txtNome");
>5) salvare
Successivamente devi semplicemente salvare su DB.
Ripeto, questo è solo un modo, il più "strutturale" che ti consente di capire tante cose importanti, se stai cominciando.