My two cents is that while ASP.NET has a mechanism for setting the MasterPage type in a Page, there is to such mechanism for a reference going the other direction and its arranged that way for a good reason. You don't want a parent container assuming the structure and layout of a child containers because the approach is a little brittle.
For example, if you do something like:
Code:
Dim gd As New GridView
gd = Me.Page.Controls(0).FindControl("form1").FindControl("ContentPlaceHolder1").FindControl("GridView1")
There's already a sense that there's a lot of code needed to even get at the grid (an indexed collection and three function calls) but more importantly the approach lacks transparency and relies on several assumptions.
For example, if the grid id or nesting level of the grid changes (say if you put the grid in a panel) then the above code breaks. Granted you can just assume an id and use recursion, but performance suffers and it's impossible for a developer to tell what's going on just looking at the Page code.
Contrast this with a property or method of a MasterPage, where the code is clean, transparent and simple:
Code:
//in page
Master.StandardGrid.DataSource = //whatever;
Master.StandardGrid.DataBind();
//alternately
//Master.BindGrid( /* some data */ );
Given the approach, a developer can instantly tell what's going on by looking at the Page code, there's no need to worry about proper IDs or nesting as with FindControl() and it's easy to reposition the grid for all Pages by only changing the MasterPage (as opposed to changing the markup of every child).
True this adds a GridView for all pages even if they may not need it, but on the other hand memory allocation is cheap and the alternative code looks for a control that may not exist which feels more awkward in my view. That said, the original post said that all Pages contain the grid which may be a perfect reason to encapsulate the control in a MasterPage.