编辑asp转发器中的特定行

时间:2011-08-31 10:46:01

标签: c# asp.net repeater

我有一个转发器,在dataItembound上我有这样的东西

((HtmlTableRow)e.Item.FindControl("prodName")).Visible = false;

然而,这会将转发器中的所有表格设置为不可见。我希望隐藏一个特定的。有没有办法做到这一点?

Heres the full imp

 protected void RepeaterCategories_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
  if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        //Get category id
        string catId = Request.QueryString["stctid"];
        //Call function to check stock levels in the next loaded category
        bool stock = checkCategoryStockLevels(catId);

        if(stock == true)
        {
            ((HtmlTableRow)e.Item.FindControl("catName")).Visible = false;
            ((HtmlTableRow)e.Item.FindControl("catImg")).Visible = false;
        }
}

3 个答案:

答案 0 :(得分:0)

在描述中,您将从页面URL的查询字符串中检索类别标识符。此请求将为所有Repeater项返回相同的值,因此每个“catName”和“catImg”HtmlTableRow都将被隐藏。

我假设您希望根据存储在绑定到转发器的DataSource中的某些值来隐藏行。

为此,您需要访问ItemDataBound事件中的DataItem并执行检查以确定哪个项目需要隐藏行。

下面我将一个字符串列表绑定到Repeater,所以我可以访问每个项目并执行类似的检查,只隐藏ItemTemplate中的HtmlTableRow,其中DataItem的值等于“Item 1”:

string dataItem = (string)e.Item.DataItem;
if (dataItem == "Item 1")
{
    ((HtmlTableRow)e.Item.FindControl("prodName")).Visible = false;   
}

我假设你绑定了一些更复杂的东西,比如DataRow或其他一些Object。无论哪种方式,该过程都是相同的,转换DataItem并执行检查。

答案 1 :(得分:0)

我会考虑使用ListView或DataList,因为这样您就可以使用数据键根据特定值确定行可见性。

答案 2 :(得分:0)

我明白了。

    for (int repeaterCount = 0; count < repeaterID.Items.Count; count++)
    {
        Label label = (Label)repeaterID.Items[repeaterCount].FindControl("labelID");
        label.Text = "Text";
    }

感谢所有帮助