e.Row.findcontrol() returns null after databind but all databound fields work properly
===

I am trying to get a gridview to populate text from the database call to my Label as shown
 The Results have been tested and are returning the correct names

            protected void Page_Load(object sender, EventArgs e)
        {
            DataTable t = DBProductLink.ListWithOptions(ProductId, LinkType, null);
            TestList.DataSource = t ;
            TestList.DataBind();
          
            
        }

The labels are created in the Gridview like this:

        <asp:GridView ID="TestList" runat="server" AutoGenerateColumns="false" DataKeyNames="Id">
        <Columns>
            <asp:TemplateField HeaderText="Sizes">
                <asp:ItemTemplate>
                    <asp:Label ID="sizeLabel" runat="server" Text='<%# Eval("size") %>' />
                </asp:ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

I then tried to loop through the gridview and access the label using the ondatarowbound, however in this it is null.

    protected void testDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType != DataControlRowType.DataRow)
                return;
            {
                Label sizeLabel = e.Row.FindControl("sizeLabel") as Label;
                sizeLabel.Text = "test";
            }
        }
I am using the exact same set up with 2 drop boxes and 2 labels on another gridview with a different name on the same page which is not having this problem. Anyone got an idea on this?