Ответ очень прост: вы просто установите для свойства Visible
значение false
для элемента, и он не будет отображаться. В этом примере я удаляю элементы из списка продуктов, которые доступны новым клиентам, только если текущий пользователь имеет историю покупок:
void rpt_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (!userHasPurchaseHistory) { return; }
// filter out products only allowed for new members
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
System.Data.Common.DbDataRecord rec = (System.Data.Common.DbDataRecord)e.Item.DataItem;
if (rec != null)
{
bool newMemberOnly = Convert.ToBoolean(rec["NewMemberOnly"]);
if (newMemberOnly) { e.Item.Visible = false; }
}
}
}
Обратите внимание, что вышеприведенное относится к IDataReader
, вам может потребоваться привести e.Item.DataItem
к другому объекту в зависимости от того, к чему вы привязываетесь.
Обратите внимание, что я определенно никогда не буду выполнять другой поиск базы данных при привязке, вы никогда не должны обращаться к базе данных в цикле, но пока данные, к которым вы привязываете, имеют что-то, что вы можете проверить, чтобы решить, хотите ли вы показать это нет ничего плохого в фильтрации в ItemDataBound
. Это может быть проблематично, если вы выполняете какие-либо виды подкачки, так как это приведет к несовместимым размерам страниц.