私の人生の間、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'のオブジェクトを作成できません
私は何が間違っているのですか?
使用した二重引用符が原因である可能性があります。試してみてください:
checked= '<%# Eval("Deactivated") %>'
プロパティ値を一重引用符で囲みます。
<asp:CheckBox ID="deactivated" runat="server" checked='<%#Eval("Deactivated")%>'></asp:CheckBox>
これはかなり古い質問ですが、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>
私の財産はブール値ではなかったからです。
これは、コントロールのrowdataboundイベントでコードビハインドを介して処理するのが最善です(グリッドビューであると想定)。
if (e.Row.RowType == RowType.DataRow)
{
CheckBox chk = (CheckBox) GridView1.FindControl("deactivated");
chk.Checked = true;
}
注:abvコードにはエラーが含まれている可能性があります...
または、
チェックボックスがバインドしようとしている特定のフィールドがビット型のフィールドになるようにデータを取得します(つまり、1または0のいずれかになります)。
Evalは式を評価するためのものです。
バインドしてみてください。
checked='<%#Bind("Deactivated")%>'