如何访问嵌套在 ListView 中的控件的属性

本文关键字:ListView 控件 属性 嵌套 何访问 访问 | 更新日期: 2023-09-27 17:56:36

我想知道我们如何访问嵌套在 ListView 模板中的控件的属性?

我在 ListView 模板中有一个 CheckBox 控件,但当我尝试在文件代码中访问它时,它没有出现在智能感知中。

请告诉我如何在代码隐藏文件中访问该复选框的属性?

如何访问嵌套在 ListView 中的控件的属性

需要使用 ItemDataBound 事件来获取对 CheckBox 控件的引用。在 ItemDataBound 事件处理程序中,可以使用 FindControl 方法(从传入的 ListViewItemEventArgs 中)获取对ItemTemplate中声明的任何控件的引用。

要从首页连接ItemDataBound,只需执行以下操作:

<asp:ListView ID="lv1" OnItemDataBound="lv1_ItemDataBound" runat="server">

要获取对CheckBox的引用(请参阅下面的完整示例),代码如下所示:

private void lv1_ItemDataBound(object sender, ListViewItemEventArgs e)
{
    //Get a reference and check each checkbox
    var chk = e.Item.FindControl("chkOne") as CheckBox;
    if (chk != null)
        chk.Checked = true;
}

下面是一个完整的示例:

<%@ Page Language="C#" AutoEventWireup="true" %>
<%@ Import Namespace="System.Collections.Generic" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ListView ID="lv1" OnItemDataBound="lv1_ItemDataBound" runat="server">
            <LayoutTemplate><div id="itemPlaceholder" runat="server"></div></LayoutTemplate>
            <ItemTemplate>
                <div><asp:CheckBox ID="chkOne" Runat="server" /> <%# Container.DataItem %></div>
            </ItemTemplate>
        </asp:ListView>    
    </div>
    </form>
</body>
</html>
<script runat="server">
public void Page_Load(object sender, System.EventArgs e)
{
    if(!Page.IsPostBack)
    {
        var items = new List<string> { "Item #1", "Item #2", "Item #3" };
        lv1.DataSource = items;
        lv1.DataBind();
    }
}
private void lv1_ItemDataBound(object sender, ListViewItemEventArgs e)
{
    //Get a reference and check each checkbox
    var chk = e.Item.FindControl("chkOne") as CheckBox;
    if (chk != null)
        chk.Checked = true;
}
</script>