Quando fazemos uma exclusão de registro contido em uma gridview, utilizamos uma rotina feita em Jquery que se comunica com uma rotina servidor que de fato faz a exclusão no banco. Abaixo, segue os
seguintes passos para tais processos:

Primeiramente, é necessário entender como será a estrutura dos botões de excluir da grid:

<asp:TemplateField HeaderText="&lt;a href=&quot;Customer_General.aspx&quot;&gt; &lt;div class=&quot;insert&quot; title=&quot;Inserir&quot;&gt;&lt;/div&gt;&lt;/a&gt;"
ItemStyle-HorizontalAlign="Left">
<ItemTemplate>
<div class="delete" title="Apagar" id='<%# Eval("CustomerId") %>' companyid='<%# Eval("CompanyId") %>'> &nbsp;
</div>
</ItemTemplate>
<ItemStyle Width="1%" />
</asp:TemplateField>

obs.: A div refere-se ao botão excluir

Depois, observamos o código Jquery:

var
line;

$(".delete").click(
function()
{
var event = arguments[0] || window.event;
event.cancelBubble = true;
event.stopPropagation();

line = $(this.parentNode.parentNode);

var request = PageMethods.DeleteCustomer(
$(this).attr("id"),
$(this).attr("companyid"),
function(result, response, context)
{
if(result){
line.removeClass().addClass('Items_Selected').hide();
}else{
alert("O registro não pode ser apagado pois há outros registros associados!");
}
}
);
}
);

E por último o webMethod:

[WebMethod]
public static bool DeleteCustomer(int customerid, int companyid)
{
bool result = true;
using (CustomerManager customerManager = new CustomerManager(null))
{
try
{
customerManager.Delete(customerManager.GetCustomer(customerid, companyid));
}
catch (System.Data.SqlClient.SqlException e)
{
result = false;
}
}
return result;
}

Se aprofunde no assunto: