在Repeater中的FindControl

时间:2012-02-23 21:44:51

标签: c# asp.net

我正在尝试在Repeater中找到一个Label,我正在使用:

    protected void lnkbtnEditRecord_Click(object sender, EventArgs e)
    {
        salesEditPanel.Visible = true;
        resultPanel.Visible = false;
        zipPanel.Visible = false;
        ddlPanel.Visible = false;
        topPanel.Visible = false;

        Label lblSalesId = (Label)(Repeater2.Items[0].FindControl("lblSalesID"));

        DataView dv = FillSalesPersonForm(Convert.ToInt32(lblSalesId.Text));

        frmViewSalesPeople.DataSource = dv;
        frmViewSalesPeople.DataBind();

    }

如果转发器只有一个结果,这很有用,但如果它有多个结果,它只获得列出的第一个项目的id。关于如何解决这个问题的任何想法?

编辑:基本上,返回内容包含用户信息,每个用户信息都是指向另一个页面的链接。因此,当我单击链接时,我想从记录的标签中获取该链接被单击的ID。因此,如果我单击5个记录中的4个,我想要记录4的ID为900,我想让900通过。

谢谢!

2 个答案:

答案 0 :(得分:4)

尝试这样的事情:

foreach (RepeaterItem item in rptItems.Items)
{
    if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
    {
        var lbl= (Label)item.FindControl("lblMyLabel");

        lbl.Text = "do something to your label";
    }
}

答案 1 :(得分:0)

从我所知道的你要做的事情来看,你有两个选择:

1)应修改此代码并将其放在转发器的ItemCommand事件处理程序

2)如果此lnkbtnEditRecord是转发器Item中的控件,则传入的sender对象应该将其父级(或父级的父级等)设为RepeaterItem,它应包含您的lblSalesId控件

无论哪种方式,我们都需要有关该方案的更多信息以及您正在尝试做的事情