2012-02-22 4 views
2

Я хочу спрятать товар в datalist в зависимости от состояния suing ItemBound, как?Как спрятать товар в datalist

+0

Будет ли это значение из источника данных? Если да, то, вероятно, лучше всего удалить его из источника данных в первую очередь. Если вы используете источник данных SQL, вы можете использовать предложение WHERE. – Curt

+0

Да, но я не могу повторно привязать данные datalist, пока я нахожусь внутри ItemBound – Bader

+0

Если в ItemBound есть значение, которое вам нужно проверить, наверняка у вас есть это доступное из источника данных? – Curt

ответ

1

Оберните PlaceHolder контроль над всем содержимым ItemTemplate.

Затем в ItemDataBound случае, вы могли бы сделать что-то вроде:

Protected Sub myDataList_ItemDataBound(sender As Object, e As System.Web.UI.WebControls.DataListItemEventArgs) Handles myDataList.ItemDataBound 
    If Not Value = Value2 Then 
     Ctype(e.Item.FindControl("myPlaceHolder"), PlaceHolder).Visible = False 
    End If 
End Sub 

Лучший подход (однако я не имел шанс проверить это), было бы скрыть весь элемент, используя e.Item.Visible. Таким образом, элементы HTML-таблицы не будут отображаться для элемента. Это также означает, что PlaceHolder необходимо будет добавить.

Protected Sub myDataList_ItemDataBound(sender As Object, e As System.Web.UI.WebControls.DataListItemEventArgs) Handles myDataList.ItemDataBound 
    If Not Value = Value2 Then 
     e.Item.Visible = False 
    End If 
End Sub 

В качестве альтернативы, если значения вы проверяете взяты из исходной базы данных, можно фильтровать элементы перед обязательными:

WHERE [email protected] 
+0

Вы пытались, если 'DataList' создаст пустые строки для этих скрытых элементов? Я полагаю, он будет выглядеть так же, как мой подход. – Filburt

+0

@Filburt Я улучшил ответ, включив возможный вариант скрытия элемента. – Curt

+0

Я попробовал ваш улучшенный пример, но ItemDataBound, похоже, не работает; даже если я устанавливаю 'e.Item.Visible' всегда' False', он все равно создает все элементы. – Filburt

0

Простое решение могло бы установить видимость ваш предметный контейнер, оценив ваше желаемое состояние на вашей позиции. Тэги: табло:

<ItemTemplate> 
    <div id="itemdiv" visible='<%# (Convert.ToInt32(Eval("YourValue")) == 5) %>' runat="server"> 
     <%# Eval("SomeOtherValue") %> 
    </div> 
</ItemTemplate> 

В моем примере используется но вы можете использовать любую переменную в области видимости.

Pitfall!

DataList будет настаивать на создании пустых строк для скрытых элементов, поэтому вам, возможно, придется использовать ListView, чтобы полностью контролировать создание вашего отфильтрованного списка элементов.


Update

Использование ListView вместо этого будет создавать только строки для видимых элементов:

<ItemTemplate> 
    <tr id="itemdiv" visible='<%# (Convert.ToInt32(Eval("YourValue")) == 5) %>' runat="server"> 
     <td><%# Eval("SomeOtherValue") %></td> 
    </tr> 
</ItemTemplate> 
<LayoutTemplate> 
    <table border="1"> 
     <tr runat="server" id="itemPlaceholder" /> 
    </table> 
</LayoutTemplate> 
Смежные вопросы