将Eval(“bitValue”)转换为Bool

时间:2010-08-11 17:38:41

标签: c# asp.net sql-server casting eval

我在ItemTemplate中有一个带有HyperLink控件的列表视图。我想在返回值为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 %>' />

...但这会导致'指定演员阵容无效'例外。

我在其他地方看到的例子suugest这应该工作。我可以确认Locked列只返回0或1(来自SQL Server) - 当然这些应该很容易从bit / int转换为bool ??

3 个答案:

答案 0 :(得分:21)

如果Locked是一个int,你应该这样做:

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

但是这也应该有效,所以当Locked&gt;时它返回true。 0

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

无论提及Locked包含0或1. 仍然 INT ,其可能由于某种原因包含值&gt;因此,我认为在== 0而不是== 1上进行检查是一种很好的做法。我们不知道Locked的用途是什么,将来设计可能会发生变化,以便Locked可以包含值&gt; 1。

答案 1 :(得分:11)

SQL是一个奇怪的世界,其中位可以有三个状态0,1和null! 所以这意味着Eval("Locked")是一个可以为空的bool,而不是一个普通的bool 如果位值为null,则转换为bool将无效,您必须先检查:

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

这假设null应该映射为false。

答案 2 :(得分:6)

Checked='<%# Eval("SEND_EMAIL") == DBNull.Value ? false : Convert.ToBoolean(Eval("SEND_EMAIL")) %>'