In the page load, put fill_data into Not IsPostBack condition, what is happening in your case is every time the page is loaded, the grid is loaded with the data and all the previous action on the grid is cleared.
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Session("user_id") = "" Then
Response.Redirect("admin_login.aspx")
End If
If Not IsPostBack Then
fill_data()
End If
End Sub