我在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 ??
答案 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")) %>'