【问题标题】:ASP.NET Binding integer to CheckBox's Checked fieldASP.NET 将整数绑定到 CheckBox 的 Checked 字段
【发布时间】:2010-12-06 09:24:16
【问题描述】:

我有一个以下 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:指定转换无效

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

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

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


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

【问题讨论】:

  • 是否将“IsUploaded”设为位或其他布尔数据类型而不是 int 选项?
  • @kscott:“IsUploaded”有点意思。
  • 你要绑定什么样的数据源?使用指向表适配器的 objectdatasource 将复选框绑定到位对我来说没有错误。
  • @kscott:它是实体框架自动生成的类型。
  • 我不知道为什么我不能投票。无论如何,很抱歉无法在这里投票给所有好的答案。它说我不能投票,除非答案是编辑??? ...

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


【解决方案1】:

解决方案:

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

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

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

【讨论】:

    【解决方案2】:

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

    aspx 页面

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

    后面的代码

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

    【讨论】:

      【解决方案3】:
      【解决方案4】:

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

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

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

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

      【讨论】:

        【解决方案5】:

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

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

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

        马克

        【讨论】:

        • @marc_s:你的意思是双“==”而不是“=”:)
        【解决方案6】:

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

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

        【讨论】:

        • 对不起,斯科特,但对于我的特殊情况,我必须坚持使用“复选框”。但感谢您让我对此有所了解。
        • @kscott:你能改变你的答案吗? (添加一个点等)以便我可以投票给你的答案?我认为您的回答对于我的情况也是一个有效的选择。谢谢。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-07
        • 1970-01-01
        • 2013-02-18
        • 1970-01-01
        • 1970-01-01
        • 2010-11-30
        • 1970-01-01
        相关资源
        最近更新 更多