【问题标题】:Get Repeater's Items获取中继器的项目
【发布时间】:2009-06-28 10:31:13
【问题描述】:

我试图在页面移动(分页)之前获取所有转发器选中的转发器项目复选框,并将它们存储在某个地方。

 foreach (RepeaterItem ri in rpt.Items)
  {        
      CheckBox box = (CheckBox)ri.FindControl("chkBox");
       if (box.Checked)
       {
          ...
       }
  }

问题是我从哪里调用这个函数? 我尝试从 ObjectDataSource1_Selected(我使用 objectdatasource 填充中继器)和 ObjectDataSource1_Selecting 调用它,但 rpt.Items.Count 也是 0。

rpt_PreRender() 事件,返回正确数量的项目,但它发生在选择复选框之前而不是之后。

我能做什么?

【问题讨论】:

  • 尝试使用 ItemDataBound 中继器的事件。

标签: c# asp.net repeater traversal


【解决方案1】:

您正在寻找的方式是不可能的...请尝试使用此代码...

if (Repeater1.Items.Count > 0)
    {
        for (int count = 0; count < Repeater1.Items.Count; count++)
        {
            CheckBox chk = (CheckBox)Repeater1.Items[count].FindControl("CheckBox1");
            if (chk.Checked)
            {

            }
        }
    }

【讨论】:

    【解决方案2】:

    Repeater 没有内置分页(如GridView 或其他复杂控件),因此它不提供诸如PageIndexChanging 之类的事件。因此,我假设您有自己的页面导航实现。因此,您应该调用您在该已实现函数中提供的函数。

    如果问题与分页无关,我会简单地建议 ItemDataBound/ItemCreated 事件。

    【讨论】:

    • 我不能在我的分页函数中调用它,因为它会导致回发,并且回发会清除中继器。
    • ITemDatabound 事件适用于每个项目,我想一次为所有项目执行此操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多