2010-01-20 80 views
10

对于我的生活,我无法绑定TemplateField中的CheckBox控件的Checked属性(直接声明)。在TemplateItem中绑定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' 的对象从它的串代表'''检查'属性

我在做什么错?

回答

17

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

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

你说得对。我不会将双引号用作外引号 – citronas 2010-01-20 18:52:11

0

Eval用于评估表达式。

尝试绑定。

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

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

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

注:ABV代码中可能有错误......

OR,

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

3

使用单引号括起来的属性值:

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

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> 

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