无法访问文件后面代码中的标签控件(放置在ItemTemplate中)

时间:2019-07-07 15:00:26

标签: c# asp.net webforms

我正在尝试访问文件后面代码中的标签控件(放置在ItemTemplate中),但无法执行相同操作。 我正在使用以下代码:

        <asp:ListView ID="lvData" runat="server" GroupPlaceholderID="groupPlaceHolder1" ItemPlaceholderID="itemPlaceHolder1"
            OnPagePropertiesChanging="listView_PagePropertiesChanging">
            <LayoutTemplate>
                <table >
                    <asp:PlaceHolder runat="server" ID="groupPlaceHolder1"></asp:PlaceHolder>
                </table>
            </LayoutTemplate>
            <GroupTemplate>
                <tr>
                    <asp:PlaceHolder runat="server" ID="itemPlaceHolder1"></asp:PlaceHolder>
                </tr>
            </GroupTemplate>
            <ItemTemplate>
                <table>
                    <tr>
                        <td>
                            <asp:Label ID="lblProfileID" runat="server" Text="LB1000"></asp:Label>
                        </td>
                    </tr>
                </table>
            </ItemTemplate>
        </asp:ListView>

在上面的代码中,应该在文件后面的代码中访问lblProfileID标签。 我已经用C#编写了以下代码,但是它显示了编译时错误,即“当前上下文中不存在名称'lblProfileID'”。

    private void GetID()
    {
        string strID = lblProfileID.Text;
    }

1 个答案:

答案 0 :(得分:0)

首先,我看不到来自数据库的任何内容,这引出了一个问题:为什么要使用ListView?您确实需要以一种帮助他人准确了解您要解决的问题的方式提出一个meaningful问题。

这是您在ItemTemplate中访问控件的典型方法:

标记:

<asp:ListView ID="lvData" runat="server" GroupPlaceholderID="groupPlaceHolder1" ItemPlaceholderID="itemPlaceHolder1"
    OnPagePropertiesChanging="listView_PagePropertiesChanging" OnItemDataBound="ListView_ItemDataBound">
    ...
</asp:ListView>

隐藏代码:

protected void ListView_ItemDataBound(object sender, ListViewItemEventArgs e)
{
    if (e.Item.ItemType == ListViewItemType.DataItem)
    {
        DataRowView row = (DataRowView)e.Item.DataItem;

        ....
        Label lblProfileID = e.Item.FindControl("lblProfileID") as Label;
        string strID = lblProfileID.Text;
        ...
    }
}

更新

您将使用上面的方法将DB值分配给标签。您还可以按以下方式在GetID()方法中获取标签的值:

private void GetID() 
{ 
    // First check if there is actually data being returned in an if statement
    foreach (ListViewDataItem item in lvData.Items) 
    {
        Label lblProfileID = e.Item.FindControl("lblProfileID") as Label;
        string strID = lblProfileID.Text;
    }    
}