【问题标题】:FindControl in gridview returns null网格视图中的 FindControl 返回 null
【发布时间】:2014-04-20 16:34:11
【问题描述】:

我目前处于两难境地,我的 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;
    ...

网格视图:

<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>

当我断点时

Label numberLbl = (Label)rvRow.Cells[0].FindControl("lblNumber");

标签显示为null (numberLbl)...

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

编辑: 如果我使用 Eval("NUMBER") 在外部 gridview(在页面上)中生成 lblNumber,这似乎可以解决,但我不明白为什么它在我尝试使用的当前 GridView 中不起作用,给定GridView1 在 DetailsView 中。

【问题讨论】:

    标签: c# asp.net gridview


    【解决方案1】:

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-20
    • 2019-01-09
    • 2013-03-16
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    • 2012-10-31
    相关资源
    最近更新 更多