Try this:
Markup:
<asp:GridView ID="GridView1" runat="server" AllowPaging="True"
AutoGenerateColumns="False" CellPadding="3"
onpageindexchanging="GridView1_PageIndexChanging"
onrowcommand="GridView1_RowCommand" onrowdeleting="GridView1_RowDeleting">
<RowStyle ForeColor="#000066" />
<Columns>
<asp:TemplateField HeaderText="product id" Visible="False">
<ItemTemplate>
<asp:Label ID="label1" runat="server" Text='<%#Eval("productid")%>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Delete">
<ItemTemplate>
<asp:ImageButton ID="ImageButton1" runat="server"
ImageUrl ="../image/delete.png" CommandName ="Delete" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
<FooterStyle BackColor="White" ForeColor="#000066" />
<PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" />
<SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White"
Height="50px" />
</asp:GridView>
In RowCommand Event:
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Delete")
{
ImageButton img = (ImageButton)e.CommandSource as ImageButton;
GridViewRow row = img.NamingContainer as GridViewRow;
Label lbid = (Label)row.FindControl("label1");
int productid = Convert.ToInt32(lbid.Text);
}
}