In my experience, the most common reason for Buttons in a GridView not working is:
That data is being bound to the GridView during the postback.
In other words, the code looks something like this:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.gvMyGridView.DataSource=getData()
Me.gvMyGridView.DataBind()
End Sub
When it should look like this:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
Me.gvMyGridView.DataSource=getData()
Me.gvMyGridView.DataBind()
End If
End Sub