ASP.NET将整数绑定到CheckBox的Checked字段

时间:2009-10-13 16:27:49

标签: asp.net data-binding listview checkbox bind

我有一个以下的ListView项目模板,我试图将整数值绑定到CheckBox的Checked属性。

IsUploaded值仅包含0和1 ...

<asp:ListView ID="trustListView" runat="server">
    <ItemTemplate>
        <asp:CheckBox ID="isUploadedCheckBox" runat="server"
            Checked='<%# Bind("IsUploaded") %>' />
    </ItemTemplate>
</asp:ListView>

但ASP.NET抱怨

  

异常详细信息:System.InvalidCastException:Sepcified强制转换无效

即使使用DataBinder.Eval()的代码有效,
我需要双向绑定,因此需要使用Bind()

<asp:CheckBox ID="isUploadedCheckBox2" runat="server"
    Checked='<%# Convert.ToBoolean(
        DataBinder.Eval(Container.DataItem, "IsUploaded"))) %>' />

如何使用Bind() 将0和1转换为布尔值?


[ANSWER] 我通过添加answer by Justin

中提到的新属性,通过部分类扩展了自动生成的类型

6 个答案:

答案 0 :(得分:7)

如果您愿意更改类,请在类的布尔值

上添加属性
public bool IsUploadedBoolean
{
   get { return IsUploaded != 0; }
   set { IsUploaded = value ? 1 : 0; }
}

如果没有,您可能会成功使用TypeConverter:

  1. 创建一个自定义TypeConverter,它将处理0和1到布尔转换
  2. TypeConverterAttribute粘贴在IsUploaded属性上,将.NET指向您的自定义转换器。

答案 1 :(得分:3)

如何在您的类中添加属性进行转换?

public bool IsUploadedBool
{
  get { return IsUploaded == 1; }
}

然后绑定到此IsUploadedBool属性,而不是直接绑定到基础INT。

马克

答案 2 :(得分:2)

一种俗气的工作是使用带有列表项的下拉列表来产生相同的效果:

<asp:DropDownList ID="ddlBool" runat="server" SelectedValue= '<%# Bind("IsUploaded") %>'>
    <asp:ListItem Text="True" Value="1" />
    <asp:ListItem Text="False" Value="0" />
</asp:DropDownList>

答案 3 :(得分:2)

答案 4 :(得分:1)

如何(顺便说一下,我正在使用存储过程)

Aspx页面

<asp:CheckBox ID="social_facebook" runat="server"  Checked='<%# Bind("True") %>' />Facebook

背后的代码

cmd.Parameters.Add("@p_facebook", SqlDbType.Bit).Value = social_facebook.Checked;

答案 5 :(得分:0)

解决方案:

嗨,我也在GridView中使用Ajax评级,我遇到了这个问题。在浏览了几个论坛后,我尝试了这个,它对我有用。我希望它对你有所帮助:

<%# Convert.ToInt32(Eval("EVALUATION")) %>

返回一个整数,因为你使用的Checked是一个整数。