C# 将Eval(“bitValue”)转换为Bool
我在ItemTemplate中有一个带有超链接控件的列表视图。如果返回值为0(false),我希望显示链接,如果返回值为1(true),则不显示链接 到目前为止,我有: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='<%
<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,则会出现异常