Please keep in mind that if you are calling the method in the child page load event handler it will first call the method then, it will hit the page load event of master page again. So if you are expecting something in master load event handler it will not work for you before the method call.
Here i have tested your code with sample data and it works fine for me when i am calling the master method from child page to bind the grid in master page. Please check with this code first and let me know if it works for you or not :
public void Bind_Master_ProductsGrid()
{
if (!dt.Columns.Contains("ProductName"))
dt.Columns.Add("ProductName");
if (!dt.Columns.Contains("UnitPrices"))
dt.Columns.Add("UnitPrices");
DataRow dr1 = dt.NewRow();
dr1["ProductName"] = "Product1";
dr1["UnitPrice"] = "10.00";
dt.Rows.Add(dr1);
DataRow dr2 = dt.NewRow();
dr2["ProductName"] = "Product2";
dr2["UnitPrice"] = "20.00";
dt.Rows.Add(dr2);
Gridview1.DataSource = dt;
Gridview1.DataBind();
}
Hope this will also work for you.