That's right. Once you have set a row invisible or a control inside a DetailsView or any other View control, that control is no longer visible to neither the user nor the code behind. That's ASP.net for you!
You have to programmatically hide the row in code behind AFTER you've loaded the data into the DetailsView.
I suggest you place an OnDataBound() control on the DetailsView and use a simple
detailsview1.rows[0].visible = false;
or
DetailsView1.Fields[1].Visible = false;
to hide the row, but again AFTER you've got the data and placed it into a global variable that can be later used in your click event.
The only other way I can think of is for you to make that row invisible to the user by making the forecolor and backcolor the same.
Also consider using
Style.Add("display","none");
I found this works sometimes when you cannot use the Visible property.