Cast Eval ("bitValue") как Bool - PullRequest
       6

Cast Eval ("bitValue") как Bool

12 голосов
/ 11 августа 2010

У меня есть представление списка с элементом управления HyperLink в ItemTemplate.Я хочу отобразить ссылку, если возвращаемое значение равно 0 (false), и не отображать ссылку, если она равна 1 (true).

Пока у меня есть это:

<asp:HyperLink runat="server" ID="lnkReview"
  NavigateUrl='<%# Eval("EnquiryID", @"selectcompany.aspx?enq={0}")%>'
  Text="Review Enquiry"
  Visible='<%# ((bool)Eval("Locked"))==true? false : true %>' />

... но это создает исключение «Указанный актерский состав недействителен».

Примеры, которые я видел в других местах, говорят, что это должно сработать.Я могу подтвердить, что столбец Locked возвращает только 0 или 1 (из SQL Server) - конечно, они должны быть легко преобразованы из bit / int в bool ??

Ответы [ 3 ]

21 голосов
/ 11 августа 2010

Если Locked - int, вы должны сделать это:

<%# ((int)Eval("Locked")) == 1 ? true : false %>

Но тогда это тоже должно сработать, поэтому оно возвращает true, когда Locked> 0

<%# !((int)Eval("Locked") == 0) %>

Независимо от того, упоминается, что Locked содержит 0 или 1. Это все еще INT , который может по некоторым причинам содержать значения> 1. Поэтому я считаю хорошей практикой чек на == 0 вместо == 1. Мы не знаем, для чего используется Locked, и в будущем дизайн может измениться, так что Locked может содержать значение> 1.

11 голосов
/ 11 августа 2010

SQL - это странный мир, в котором биты могут иметь три состояния 0, 1 и ноль! Таким образом, это означает, что Eval("Locked") является типом bool типа null, а не просто bool Приведение к типу bool не будет действительным, если значение бита равно нулю, сначала необходимо проверить это:

(Eval("Locked")!=null && (bool)Eval("Locked")==true)

Предполагается, что значение null должно быть сопоставлено с false.

6 голосов
/ 21 апреля 2014
Checked='<%# Eval("SEND_EMAIL") == DBNull.Value ? false : Convert.ToBoolean(Eval("SEND_EMAIL")) %>'  
...