2010-05-19 2 views
2

У меня есть кнопка удаления в каждой строке GridView (компонент ASP.NET). Я хочу, чтобы некоторые кнопки удаления были невидимыми. Видимость кнопки удаления должна зависеть от данных, которые возвращают строку.Видимость кнопки привязки к выражению (C#)

GridView Поддержан EntityDataSource. GridView отображает объекты, называемые Category, по одному экземпляру в каждой строке. Объект Category имеет (кроме других) также поле типа EntityCollection. Название этого поля: Items. В принципе, я хочу разрешить пользователю удалять строку только в том случае, если поле Items области поддержки Category является пустой коллекцией.

Я не могу составить переплет Visible. У меня нет опыта с привязками, и Google действительно не помогает. Это как кнопка выглядит прямо сейчас:

<asp:Button ID="DeleteButton" runat="server" CommandName="Delete" 
        Text="Delete" 
        Visible=??? ></asp:Button> 

Я не знаю, что должно заменить ???. Кнопка schold быть видимой только тогда, когда это выражение истинно:

((SimpleEShop.Model.Category) dataItem).Items.LongCount() <= 0 

, где dataItem переменные содержит данные о текущей строке в таблице. Какая привязка мне нужна?

ответ

3

egrunin пропустил некоторые вещи попробовать, как этот

Visible='<%# !(((System.Data.Objects.DataClasses.EntityCollection<YourItemType>)Eval("Items")).Count <= 0)%>' 
+0

Это выглядит многообещающим - это порождает ошибку, говоря, что в коллекции сущностей класса нет свойства LongCount, но это моя ошибка ... Я буду исправить (найти правильное свойство) и повторить попытку. – drasto

+0

Я изменил свой ответ тем, что, как мне кажется, просто заменит «YourItemType», и это должно работать – alejandrobog

+0

В выражении было еще две проблемы, но, наконец, у меня есть следующее: Visible = '<% # (int) Eval ("Items.Count") <= 0? true: false%> '. Теперь проблема в том, что это оценивается как true, независимо от того, сколько элементов находится в «Items». Как найти, где проблема? Я не могу использовать отладчик для точки останова в этом коде ... – drasto

3

Обычно я поместил это в обработчике DataBound, но как о чем-то вроде этого:

Visible="<%# Eval("Items.LongCount") <= 0 ? "false" : "true";%>" 

Кавычки-внутри кавычек может привести к ошибкам, что является одной из причин, я бы поставил его в ItemDataBound обработчик.

+0

Как бы вы решить его с помощью обработчика ItemDataBound? – drasto

+0

В выражении были некоторые проблемы, но, наконец, у меня это: Visible = '<% # (int) Eval ("Items.Count") <= 0? true: false%> '. Теперь проблема в том, что это оценивается как true, независимо от того, сколько элементов находится в «Items». Как найти, где проблема? Я не могу использовать отладчик в точке останова в этом коде ... – drasto

+1

Я бы просто использовал Visible = '<% # Eval ("Items.Count") <= 0 %>' –

2

Добавление к синтаксису egrunin, я бы просто использовать

Visible='<%# Eval("Items.Count") <= 0 %>' 
Смежные вопросы