You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin Forms中无法遍历ListView项,如何设置ItemTemplate内复选框?

解决ListView遍历及复选框设置问题

看来你在ASP.NET Web Forms里使用ListView时遇到了两个头疼的问题:找不到ListViewDataItem类型,以及ListView对象没有Items属性。我来帮你一步步理清问题,同时实现遍历行设置复选框的需求。

先说说错误原因

  1. 找不到ListViewDataItem类型:
    这个类型属于System.Web.UI.WebControls命名空间,如果你没有在代码文件顶部添加using System.Web.UI.WebControls;,编译器就找不到它。另外,如果你误把WinForms的ListView(属于System.Windows.Forms)用到了Web项目里,也会出现这个错误——WinForms里根本没有ListViewDataItem这个类型。

  2. ListView没有Items属性:
    同样是命名空间的问题!只有ASP.NET Web Forms的ListView控件才有Items属性,如果你声明的是WinForms的ListView,自然看不到这个属性。要确保你用的是Web控件,要么添加命名空间引用,要么直接写全称System.Web.UI.WebControls.ListView。

实现遍历行并设置复选框的正确步骤

假设你的ASPX页面里已经定义了带复选框的ListView(用ItemTemplate):

<asp:ListView ID="lv" runat="server">
    <ItemTemplate>
        <asp:CheckBox ID="chkSelect" runat="server" />
        <!-- 这里可以添加其他绑定的控件 -->
    </ItemTemplate>
</asp:ListView>

第一步:确保命名空间引用

在后台代码文件顶部添加:

using System.Web.UI.WebControls;

第二步:绑定数据到ListView

只有当ListView绑定数据并执行DataBind()后,Items集合才会有内容。比如在Page_Load里:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        // 替换成你的数据源,比如DataTable、List<T>等
        lv.DataSource = GetYourDataSource();
        lv.DataBind();
    }
}

第三步:遍历行并设置复选框

现在可以安全地遍历每一行,找到复选框并设置了:

// 遍历ListView的每一项
foreach (ListViewDataItem item in lv.Items)
{
    // 通过FindControl找到ItemTemplate里的复选框
    CheckBox chk = (CheckBox)item.FindControl("chkSelect");
    if (chk != null)
    {
        // 这里设置复选框状态,比如设为选中
        chk.Checked = true;
        // 或者根据你的业务逻辑设置其他属性
    }
}

注意事项

  • 如果你是动态创建ListView(像你代码里那样new ListView()),记得要先给它指定ItemTemplate(需要实现ITemplate接口),绑定数据后再遍历Items,否则Items会是空的。
  • 一定要在数据绑定完成后再遍历Items,比如在DataBound事件里处理,或者在绑定代码之后执行遍历逻辑。

内容的提问来源于stack exchange,提问作者jose luis gonzalez clua

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:10:38