3

我想知道是否可以使用转发器数据源中的布尔变量来设置复选框的选中属性?

我尝试了几种方法,但没有任何成功......:

<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

中继器的DataSource 是List。

4

4 回答 4

4

另一种解决方案是处理 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;
}
于 2012-08-22T13:20:28.430 回答
3

我相当确定它应该以这种方式工作:

Checked='<%# Bind("IsDefault") %>'

顺便说一句,<您的第一种方法中缺少一个:

Checked="%#Eval...

编辑:(因为您还编辑了您的问题并更正了它)

现在还有其他问题,您在这里有两个连续的引号:

Checked="<%#Eval("
于 2012-08-22T13:02:02.900 回答
3

老问题,但我在我的应用程序中使用更简单的方法解决了这个问题:

<asp:CheckBox ID="chkIncludePdf" runat="server" Checked='<%# Eval("DefaultInclude").ToString() == "True" %>' />
于 2014-11-24T20:51:21.620 回答
2

代码的问题实际上是您嵌套了双引号

Checked="<%# DataBinder.Eval(Container.DataItem, "IsDefault")%>"

应该

Checked='<%# DataBinder.Eval(Container.DataItem, "IsDefault")%>'
于 2013-08-21T16:24:39.340 回答