#asp.net #visible #aspxgridview
#asp.net #видимый #aspxgridview
Вопрос:
Я пытаюсь установить для свойства visible для метки значение true или false в зависимости от условия. Это на странице ASPX. Я делаю что-то не так и получаю сообщение об ошибке при выполнении.
<td><asp:Label ID="Label23" runat="server" Text='CERTIFIED'
Visible='<%# DataBinder.Eval(Container.DataItem, "IsAuthorized") > 0%>'>
</asp:Label></td>
Ошибка, которую я получаю, приведена ниже.
Сообщение об ошибке компилятора: CS0019: оператор ‘>’ не может быть применен к операндам типа ‘object’ и ‘int’
Какие изменения необходимо внести?
Все, что мне нужно сделать, установить для свойства visible метки значение true, когда значение ‘isAuthorized’ больше нуля.
Ответ №1:
Это потому, что у тебя синтаксическая ошибка, глупый кролик.
Вот, пожалуйста, это должно быть так:
<td><asp:Label ID="Label23" runat="server" Text='CERTIFIED' Visible='<%# DataBinder.Eval(Container.DataItem, "IsAuthorized") %>' /></td>
У вас >
0
где-то там были дополнительные и.
Кроме того, поскольку вы ничего не делаете между <asp:Label
и </asp:Label>
, вы можете закрыть его косой чертой и пропустить отдельный конечный тег. Вот так <asp:Label ... />
КРОМЕ того, иногда попытка установить подобное свойство visible вызывает проблемы, программа может пожаловаться, что значение не было логическим. Возможно, вы захотите также объявить явное преобразование, подобное этому:
Visible='<%# Convert.ToBoolean(DataBinder.Eval(Container.DataItem, "IsAuthorized")) %>'
Комментарии:
1. Это прекрасный ответ! От silly bunny к исправленной строке кода, к объяснению исправления, а затем в конце «вы также можете захотеть». Это идеальная формула для ответа — 1) ответить, 2) объяснить, 3) улучшить.
Ответ №2:
Предполагая, что IsAuthorized
это битовый тип, просто приведите его к логическому:
Visible='<%#Convert.ToBoolean(Eval("IsAuthorized"))%>'
Комментарии:
1. И помните, что оно не может быть нулевым. 🙂
2. Большое спасибо. Это отлично работало для GridView с источником XML.
<asp:Label ID="hll1" Visible='<%# Convert.ToBoolean(Eval("srcvis1")) %>' Text="<br />" runat="server" />
Ключевым моментом, конечно, было заменитьBind()
вызовEval()
вызовом.
Ответ №3:
Обратите внимание, что на стороне сервера вы можете сделать это:
<someControl id="myId" runat="server" Visible='<%# this.SomeField > 5 %>'>
Но это не сработает, если вы не вызовете DataBind в коде, например, в Page_Load:
myId.DataBind():
Ответ №4:
Предполагая IsAuthorized
, что это целое число, вы должны использовать это:
Visible='<%# ((int)DataBinder.Eval(Container.DataItem, "IsAuthorized")) > 0 %>'
Eval возвращает значение an object
, поэтому сначала вам нужно преобразовать его в значение an integer
.
Комментарии:
1. Кажется, что с «> 0», включенным в OP, это правильный ответ.
Ответ №5:
<td><asp:Label ID="Label23" runat="server" Text='CERTIFIED' Visible='<%# (int)(DataBinder.Eval(Container.DataItem, "IsAuthorized")) > 0 %>' ></asp:Label></td>