我有一个转发器,在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;
}
}
答案 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";
}
感谢所有帮助