我在想,如果有可能设置一个复选框的选中属性格式,使用布尔变量形成中继器的数据源?
我尝试过多种方法,但没有任何成功...:
<asp:Repeater ID="rpt" runat="server">
<itemTemplate>
<asp:CheckBox runat="server" CssClass="checkbox"
Checked="<%#Eval("IsDefault").ToString().ToLower()%>"
ID="isDefaultCheckBox"/>
</itemTemplate>
</asp:Repeater>
<asp:Repeater ID="rpt" runat="server">
<itemTemplate>
<asp:CheckBox runat="server" CssClass="checkbox"
Checked="<%# DataBinder.Eval(Container.DataItem, "IsDefault")%>"
ID="isDefaultCheckBox"/>
</itemTemplate>
</asp:Repeater>
ISDEFAULT是一类视场:
public bool IsDefault
Repeater的数据源是列表。
另一种解决方案是处理ItemDataBound事件:
<asp:Repeater ID="rpt" runat="server" OnItemDataBound="rpt_ItemDataBound">
<itemTemplate>
<asp:CheckBox runat="server" CssClass="checkbox" ID="isDefaultCheckBox"/>
</itemTemplate>
</asp:Repeater>
...
protected void rpt_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
RepeaterItem ri = e.Item;
var dataItem = ri.DataItem as YourClassOrInterface;
var isDefaultCheckBox = ri.FindControl("isDefaultCheckBox") as CheckBox;
isDefaultCheckBox.Checked = dataItem.IsDefault;
}
我相当肯定,它应该以这种方式工作:
Checked='<%# Bind("IsDefault") %>'
顺便说一句,有一个失踪<
你的第一种方法:
Checked="%#Eval...
编辑 :(因为你也编辑你的问题并纠正它)
现在有别的东西错了,你在这里已经连续两次报价:
Checked="<%#Eval("
老问题,但我使用的东西更简单的解决了这个在我的应用程序:
<asp:CheckBox ID="chkIncludePdf" runat="server" Checked='<%# Eval("DefaultInclude").ToString() == "True" %>' />
与代码的问题其实是,你是嵌套双引号的事实
Checked="<%# DataBinder.Eval(Container.DataItem, "IsDefault")%>"
应该
Checked='<%# DataBinder.Eval(Container.DataItem, "IsDefault")%>'