【问题标题】:Binding the Checked Property of a CheckBox within a TemplateItem在 TemplateItem 中绑定 CheckBox 的 Checked 属性
【发布时间】:2011-01-07 10:03:39
【问题描述】:

在我的一生中,我无法在 TemplateField 中绑定 CheckBox 控件的 Checked 属性(以声明方式)。

我试过了:

<asp:TemplateField>
    <ItemTemplate>
        <asp:CheckBox ID="deactivated" runat="server" checked="<%#Eval("Deactivated")%>"></asp:CheckBox>
    </ItemTemplate>
<asp:TemplateField>

<asp:TemplateField>
    <ItemTemplate>
        <asp:CheckBox ID="deactivated" runat="server" checked="<%#Eval(Container.DataItem, "Deactivated")%>"></asp:CheckBox>
    </ItemTemplate>
    </asp:TemplateField>      
</asp:TemplateField>

我不断看到警告说明:

无法为“Checked”属性从它的字符串表示形式“System.Boolean”创建类型的对象

我做错了什么?

【问题讨论】:

    标签: asp.net data-binding gridview checkbox templatefield


    【解决方案1】:

    Eval 用于评估表达式。

    尝试绑定。

    checked='<%#Bind("Deactivated")%>'
    

    【讨论】:

      【解决方案2】:

      最好通过控件的 rowdatabound 事件中的代码隐藏来处理这个问题(假设它是一个 gridview)。

      if (e.Row.RowType == RowType.DataRow)
      {
          CheckBox chk = (CheckBox) GridView1.FindControl("deactivated");
          chk.Checked = true;
      }
      

      注意:abv 代码可能包含错误...

      或,

      以这样一种方式检索数据,即复选框试图绑定的特定字段应该是位类型的字段(即它可以有 1 或 0)。

      【讨论】:

        【解决方案3】:

        这可能是因为您使用了双引号。试试:

        checked= '<%# Eval("Deactivated") %>'
        

        【讨论】:

        • 你是对的。我不会将双引号用作外引号
        • 你知道为什么需要单引号吗?
        【解决方案4】:

        在属性值周围使用单引号:

        &lt;asp:CheckBox ID="deactivated" runat="server" checked='&lt;%#Eval("Deactivated")%&gt;'&gt;&lt;/asp:CheckBox&gt;

        【讨论】:

          【解决方案5】:

          这是一个很老的问题,但这是我在 VS2013 中必须做的事情,System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35

          <asp:TemplateColumn ItemStyle-Width="50" HeaderText="Is Verified">
            <ItemTemplate>
              <asp:CheckBox ID="chkVerified" runat="server" AutoPostBack="true" EnableViewState="true" OnCheckedChanged="chkVerified_CheckedChanged" Checked='<%#DataBinder.GetPropertyValue(Container.DataItem,"IsVerified").ToString()=="0"%>' />
          
                                  </ItemTemplate>
          </asp:TemplateColumn>
          

          因为我的属性不是布尔值。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2010-11-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多