C# gridview中的FindControl返回null

C# gridview中的FindControl返回null,c#,asp.net,gridview,C#,Asp.net,Gridview,我目前处于一个两难境地,我的gridview没有返回一个标签,它位于detailsview中 我的C代码是: protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) { // get pet number for when removing a pet from reservation int numberSelected = -1; String numbertxt = "-1"

我目前处于一个两难境地,我的gridview没有返回一个标签,它位于detailsview中

我的C代码是:

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
    // get pet number for when removing a pet from reservation
    int numberSelected = -1;
    String numbertxt = "-1";

    GridView gv1 = (GridView)sender;
    GridViewRow rvRow = gv1.Rows[gv1.SelectedRow.RowIndex];
    Label numberLbl = (Label)rvRow.Cells[0].FindControl("lblNumber");

    // find selected index, and get number in column 0
    // label within GridView1 within dvReservation DetailsView
    numbertxt = numberLbl.Text;
    ...
Gridview:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
    DataSourceID="dsObjGet" 
    OnSelectedIndexChanged="GridView1_SelectedIndexChanged">
    <Columns>
        <asp:TemplateField InsertVisible="False" ShowHeader="False">
            <AlternatingItemTemplate>
                <asp:Label ID="lblNumber" runat="server"
                    Text='<%# Eval("NUMBER") %>' Visible="False"></asp:Label>
            </AlternatingItemTemplate>
            <ItemTemplate>
                <asp:Label ID="lblNumber" runat="server" 
                    Text='<%# Eval("NUMBER") %>' Visible="False"></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField ShowHeader="False">
            <AlternatingItemTemplate>
                <asp:Label ID="lblName" runat="server" Text='<%# Eval("NAME") %>'>
                </asp:Label>
            </AlternatingItemTemplate>
            <ItemTemplate>
                <asp:Label ID="lblName" runat="server" Text='<%# Eval("NAME") %>'>
                </asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:CommandField SelectText="Remove" ShowSelectButton="True" 
            CausesValidation="False">
            <ControlStyle CssClass="link" />
        </asp:CommandField>
    </Columns>
</asp:GridView>
标签显示为空数字BL

异常返回的消息为: 对象引用未设置为对象的实例

编辑:
如果我在带有EvalNUMBER的页面上的外部gridview中生成lblNumber,这似乎可以解决问题,尽管我不明白为什么它在我尝试使用的当前gridview中不起作用,因为GridView1位于DetailsView中。

使用FindControl时不应该使用单元格集合。就用这个

GridView gv1 = (GridView)sender;
GridViewRow rvRow = gv1.SelectedRow;
Label numberLbl = (Label)rvRow.FindControl("lblNumber");

我试过你的答案,但没有一个是有效的。。。实际上,获取索引的异常超出范围。必须为非负数且小于集合的大小。这很奇怪——因为我在网格中有10行,我只点击了第2行或第3行,但它已经超出了范围……你认为发生了什么事?@bonCodigo:你能把它作为一个问题发布在SO中吗?给我看看你想要控件的标记和事件。我终于把它修好了。
GridView gv1 = (GridView)sender;
GridViewRow rvRow = gv1.SelectedRow;
Label numberLbl = (Label)rvRow.FindControl("lblNumber");