C# 将Eval(“bitValue”)转换为Bool

C# 将Eval(“bitValue”)转换为Bool,c#,asp.net,sql-server,casting,eval,C#,Asp.net,Sql Server,Casting,Eval,我在ItemTemplate中有一个带有超链接控件的列表视图。如果返回值为0(false),我希望显示链接,如果返回值为1(true),则不显示链接 到目前为止,我有: <asp:HyperLink runat="server" ID="lnkReview" NavigateUrl='<%# Eval("EnquiryID", @"selectcompany.aspx?enq={0}")%>' Text="Review Enquiry" Visible='<%

我在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 %>' />

…但这会导致“指定的强制转换无效”异常


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

如果锁定的是int,您应该执行以下操作:


但是这也应该起作用,所以当Locked>0时返回true



无论是否提到锁定包含0或1。它仍然是一个INT,由于某些原因,它可以包含>1的值。因此,我发现检查
==0
而不是
==1
是一种很好的做法。我们不知道什么是
Locked
,将来设计可能会改变,使
Locked
可以包含一个值>1。

SQL是一个奇怪的世界,位可以有三种状态0、1和null! 这意味着
Eval(“Locked”)
是一个可空类型bool,而不是普通bool 如果位值为null,则对布尔的转换将无效,您必须首先检查:

(Eval("Locked")!=null && (bool)Eval("Locked")==true)
这假设null应该映射为false。

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

((int)Eval(“Locked”)==1就足够了。我发誓我真的试过了。令人困惑的是,该字段实际上有一点,因此不能大于1,因此我希望能够将其转换为bool。尽管如此,将其视为int仍然有效,这是很重要的!谢谢。@leppie-
((int)Eval(“Locked”)!=-似乎没有人发现,逻辑颠倒了。。。但我要说的是:)这个解决方案对我不起作用。为什么它似乎对其他人都有效?我很难确定op是以int开头还是数据库中的一位开头。我从一点开始。这就是我的解决方案:你确定吗?如果没有空值(经OP确认),将
bool?
转换为
bool应该没有问题。忘记空值的问题,您的解决方案将无法工作,因为它不允许出于未知原因将一点转换为bool…这是唯一对我有帮助的方法,非常感谢!是的,如果使用null而不是DBNull.Value,则会出现异常