7

我有一个以下 ListView 项目模板,我在其中尝试将整数值绑定到CheckedCheckBox 的属性。

IsUploadedvalue 只包含 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:指定转换无效

尽管使用以下代码DataBinder.Eval()有效, 但
我需要有 2 路绑定,因此需要使用Bind().

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

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


[回答] 我通过添加贾斯汀回答中提到的新属性,通过部分类扩展了自动生成的类型

4

6 回答 6

7

如果您愿意更改类,请在类上添加一个布尔属性

public bool IsUploadedBoolean
{
   get { return IsUploaded != 0; }
   set { IsUploaded = value ? 1 : 0; }
}

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

  1. 创建一个自定义TypeConverter,它将处理 0 和 1 到布尔转换
  2. 将TypeConverterAttribute粘贴在 IsUploaded 属性上,以将 .NET 定向到您的自定义类型转换器。
于 2009-10-13T16:45:30.513 回答
3

向您的类添加一个进行转换的属性怎么样?

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

然后绑定到这个IsUploadedBool属性,而不是直接绑定到底层的 INT。

马克

于 2009-10-13T16:32:14.060 回答
2

一种俗气的解决方法是使用带有列表项的下拉列表来产生相同的效果:

<asp:DropDownList ID="ddlBool" runat="server" SelectedValue= '<%# Bind("IsUploaded") %>'>
    <asp:ListItem Text="True" Value="1" />
    <asp:ListItem Text="False" Value="0" />
</asp:DropDownList>
于 2009-10-13T16:44:04.210 回答
2

欲了解更多信息,请访问: http ://dhondiyals.wordpress.com/2010/05/03/binding-checkbox-with-integer-value-in-gridviewtrick/

于 2010-05-03T17:30:14.363 回答
1

怎么样(顺便说一句,我正在使用存储过程)

页面

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

背后的代码

cmd.Parameters.Add("@p_facebook", SqlDbType.Bit).Value = social_facebook.Checked;
于 2010-05-21T16:08:56.390 回答
0

解决方案:

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

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

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

于 2013-08-21T01:08:20.977 回答