我有一个SQL存储过程,我根据另外两列动态创建一个列(“Certified”)。此列的值为“0”或“1”。 SQL存储的proc查询是:
, CASE WHEN
(StartMiles < EndMiles)
AND (StartTime < EndTime)
AND (bcd.Status != 'C')
THEN '1' ELSE '0' END
AS Certified
在我的aspx页面的前端,我有一个telerik radgrid,它将显示一个复选框(如果值为1则启用,如果值为0则禁用)。 aspx代码是:
<telerik:GridTemplateColumn DataField="Certified" HeaderText="Certified" Visible="true">
<ItemTemplate>
<asp:CheckBox ID="CheckBox2" runat="server" AutoPostBack="true"
OnCheckedChanged="CheckBox2_CheckedChanged"
Enabled='<%# !bool.Parse(Eval("Certified").ToString()) %>' />
</ItemTemplate>
</telerik:GridTemplateColumn>
我在aspx页面上收到错误字符串未被识别为有效的布尔
要解决该错误,如何在存储过程中设置数据类型?
答案 0 :(得分:4)
<telerik:GridTemplateColumn DataField="Certified" HeaderText="Certified" Visible="true">
<ItemTemplate>
<asp:CheckBox ID="CheckBox2" runat="server" AutoPostBack="true"
OnCheckedChanged="CheckBox2_CheckedChanged"
Enabled='<%# !Convert.ToBoolean(Convert.ToInt32(Eval("Certified").ToString())) %>' />
</ItemTemplate>
</telerik:GridTemplateColumn>
答案 1 :(得分:1)
我建议使用代码隐藏方法来执行此操作,而不是通过嵌入式代码块将逻辑放入标记中,如下所示:
标记:
<telerik:GridTemplateColumn DataField="Certified" HeaderText="Certified"
Visible="true">
<ItemTemplate>
<asp:CheckBox ID="CheckBox2" runat="server" AutoPostBack="true"
OnCheckedChanged="CheckBox2_CheckedChanged"
Enabled='<%# IsCertified(Eval("Certified").ToString()) %>' />
</ItemTemplate>
</telerik:GridTemplateColumn>
代码隐藏:
protected bool IsCertified(string certifiedValue)
{
return !bool.Parse(certifiedValue);
}
注意:为了更安全,我建议使用Boolean.TryParse()
方法而不仅仅是Parse()
,因为这样可以消除无法解析为bool
的字符串的可能性从抛出异常。请阅读Boolean.TryParse Method documentation以获取更多信息。
在我看来,这提供了两个优于OP代码的优势: