Answer
If you need to stick to that kind of layout, then I would suggest something like this example:
<asp:GridView ID="GridView2" runat="server" Style="z-index: 103; left: 144px; position: absolute;
top: 212px" AutoGenerateColumns="False" OnRowCancelingEdit="GridView2_RowCancelingEdit"
OnRowEditing="GridView2_RowEditing" OnRowUpdating="GridView2_RowUpdating">
<Columns>
<asp:BoundField DataField="name" HeaderText="Name" />
<asp:BoundField DataField="number" HeaderText="Number" />
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="linkEdit" CommandName="Edit" Text="Edit" Width="45px" runat="server"
OnClick="EditClick" />
</ItemTemplate>
<EditItemTemplate>
<asp:LinkButton ID="linkUpdate" CommandName="Update" Text="Update" Width="45px" OnClick="UpdateClick"
runat="server" />
<asp:LinkButton ID="linkCancel" CommandName="Cancel" Text="Cancel" Width="45px" OnClick="CancelClick"
runat="server" />
</EditItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
protected void EditClick(object sender, EventArgs e)
{
LinkButton button = (LinkButton)sender;
GridView grid = (GridView)this.FindParent(button, typeof(GridView));
int index = GetItemIndex(button.UniqueID);
grid.EditIndex = index;
grid.DataBind();
}
protected void UpdateClick(object sender, EventArgs e)
{
LinkButton button = (LinkButton)sender;
}
protected void CancelClick(object sender, EventArgs e)
{
LinkButton button = (LinkButton)sender;
}
private int GetItemIndex(string input)
{
string pattern = @"ctl(?<index>\d+)";
Match match = Regex.Match(input, pattern);
if (match.Success)
return int.Parse(match.Groups["index"].Value) - 2;
return -1;
}
private Control FindParent(Control ctrl, Type type)
{
while (ctrl.GetType() != type)
ctrl = ctrl.Parent;
return ctrl;
}
protected void GridView2_RowEditing(object sender, GridViewEditEventArgs e)
{
}
protected void GridView2_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
GridView grid = (GridView)sender;
grid.EditIndex = -1;
grid.DataBind();
}
protected void GridView2_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
// Execute update SQL.
}