You almost have it, you are calling the FindControl on the wrong object.
In your GridView1_RowUpdating method change:
TextBox tb = (TextBox) gv.FindControl("txtSubscriptionStartDateStr");
to
TextBox tb = (TextBox) gvRow.FindControl("txtSubscriptionStartDateStr");
So your function is this:
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
GridView gv = (GridView)sender;
GridViewRow gvRow = gv.Rows[e.RowIndex];
TextBox tb = (TextBox) gvRow.FindControl("txtSubscriptionStartDateStr");
if (tb == null)
throw new ApplicationException("Could not find TextBox");
string subscriptionStartDateStr = tb.Text;
// more code to parse and use the subscription date
}