Try adding a check of IsPostBack before setting the loading your GridView. That will prevent you from overwriting it's values.
protected void Page_Load(object sender, EventArgs e) {
if(!IsPostBack) {
/*Populate your GridView*/
}
}
protected void GridView_RowUpdated(object sender, GridViewUpdatedEventArgs e)
{
/*show your calendar here if you need to*/
if(whatever) calendar.Visible = true;
}
This should work, if it doesn't then I'd recommend putting breakpoints in your Page_Load and RowUpdated methods and stepping through it, preferrably with a Watch on the gridview's datasource (it'll go red if it's changed) and a watch on calendar.Visible, to help you see if something has changed.
For the record, control events like OnRowUpdated will never fire before Page_Load unless explicitly called for some reason. Chances are you're just doing something where it's not updating the content of the GridView before it gets to the RowUpdated method, or it's overwriting the data in the GridView due to a lack of !IsPostBack check.