12

在我的一生中,我无法在 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>

我不断看到一条警告说:

无法从“已检查”属性的字符串表示“”创建类型为“System.Boolean”的对象

我究竟做错了什么?

4

5 回答 5

18

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

checked= '<%# Eval("Deactivated") %>'
于 2010-01-20T18:49:38.693 回答
3

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

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

于 2010-01-20T18:50:24.603 回答
1

这是一个很老的问题,但这是我在 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>

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

于 2014-02-06T20:34:42.850 回答
1

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

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

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

或者,

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

于 2010-01-20T18:48:11.380 回答
0

Eval 用于评估表达式。

尝试绑定。

checked='<%#Bind("Deactivated")%>'
于 2010-01-20T18:43:49.037 回答