铸造Eval(“ bitValue”)为布尔型

问题描述 投票:12回答:3

我在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 ??

c# asp.net sql-server casting eval
3个回答
21
投票

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

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

但是这也应该起作用,因此当Locked> 0时它返回true。>

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

无论是否提到Locked包含0或1。它都是still

INT,出于某种原因它可以包含值>1。因此,我发现对== 0进行检查是一种很好的做法]代替== 1。我们不知道Locked用于什么,将来设计可能会更改,以便Locked可以包含> 1的值。

11
投票

SQL是一个奇怪的世界,其中位可以具有三种状态0、1和null!因此,这意味着Eval("Locked")是可为null的布尔型,而不是普通布尔型如果该位值为null,则强制转换为bool无效,您必须首先检查以下内容:


6
投票
Checked='<%# Eval("SEND_EMAIL") == DBNull.Value ? false : Convert.ToBoolean(Eval("SEND_EMAIL")) %>'  
© www.soinside.com 2019 - 2024. All rights reserved.