我在ItemTemplate中有一个带有HyperLink控件的列表视图。如果返回值为0(假),我想显示链接,如果返回值为1(真),我不显示链接。
到目前为止,我有这个:
<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 ??
如果Locked是一个int,则应这样做:
<%# ((int)Eval("Locked")) == 1 ? true : false %>
但是这也应该起作用,因此当Locked> 0时它返回true。>
和INT,出于某种原因它可以包含值>1。因此,我发现对<%# !((int)Eval("Locked") == 0) %>
无论是否提到Locked包含0或1。它都是still
== 0
进行检查是一种很好的做法]代替== 1
。我们不知道Locked
用于什么,将来设计可能会更改,以便Locked
可以包含> 1的值。SQL是一个奇怪的世界,其中位可以具有三种状态0、1和null!因此,这意味着Eval("Locked")
是可为null的布尔型,而不是普通布尔型如果该位值为null,则强制转换为bool无效,您必须首先检查以下内容:
Checked='<%# Eval("SEND_EMAIL") == DBNull.Value ? false : Convert.ToBoolean(Eval("SEND_EMAIL")) %>'