CJM*_*CJM 12 c# sql-server asp.net casting eval
我在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 %>' />
Run Code Online (Sandbox Code Playgroud)
...但这会导致"指定的强制转换无效"异常.
我在其他地方看到的例子,这应该有效.我可以确认Locked列只返回0或1(来自SQL Server) - 当然这些应该很容易从bit/int转换为bool?
Jer*_*oen 21
如果Locked是一个int,你应该这样做:
<%# ((int)Eval("Locked")) == 1 ? true : false %>
Run Code Online (Sandbox Code Playgroud)
但是这也应该工作,所以当Locked> 0时它返回true
<%# !((int)Eval("Locked") == 0) %>
Run Code Online (Sandbox Code Playgroud)
无论提到Locked包含0还是1.它仍然是一个INT,它可以由于某种原因包含值> 1.因此我发现做检查的好习惯== 0而不是== 1.我们不知道Locked用于什么以及将来设计可能会改变,因此Locked可以包含值> 1.
Gno*_*omo 11
SQL是一个奇怪的世界,其中位可以有三个状态0,1和null!所以这意味着它Eval("Locked")是一个可以为空的类型bool,而不是一个普通的bool如果位值为null,则转换为bool将无效,您必须先检查:
(Eval("Locked")!=null && (bool)Eval("Locked")==true)
Run Code Online (Sandbox Code Playgroud)
这假设null应该映射为false.
小智 6
Checked='<%# Eval("SEND_EMAIL") == DBNull.Value ? false : Convert.ToBoolean(Eval("SEND_EMAIL")) %>'
Run Code Online (Sandbox Code Playgroud)