【问题标题】:ASP.Net repeaters bind with a collection of objectsASP.Net 中继器与对象集合绑定
【发布时间】:2013-05-26 21:01:41
【问题描述】:

我有一个集合List<Person>Persons,在一个人中有一个国家(Country.Name)。 我已成功将中继器绑定到我的收藏,但是尝试写出国家名称给我带来了一些麻烦,而且我的 Persons 中有一个 bool IsActive,我想显示一个图标而不是 true/false。

protected void Page_Load(object sender, EventArgs e)
    {
        List<Person> persons = GetPersons();
        RP_Persons.DataSource = persons;
        RP_Persons.DataBind();
    }

    protected void RP_Persons_OnItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
           // How do I get my stuff here? I need to get the country name and be able to use a <div class="active"><img src='xxxx' /></div>
        }
    }

这是我的标记:

<ItemTemplate>
    <tr>
        <td><%# DataBinder.Eval(Container.DataItem, "Email") %></td>
        <td><%# DataBinder.Eval(Container.DataItem, "Registered") %></td>
        <td><%# DataBinder.Eval(Container.DataItem, "Country") %></td>
        <td><%# DataBinder.Eval(Container.DataItem, "IsActive") %></td>
    <tr>
</ItemTemplate>

【问题讨论】:

    标签: asp.net data-binding repeater


    【解决方案1】:

    尽管您在答案中提供的方法确实有效,但恕我直言,正如您所建议的那样,这种类型的代码更容易在代码隐藏中完成和维护。

    你可以这样做:

    这是aspx文件的代码:

    <ItemTemplate>
        <tr>
            <td><%# DataBinder.Eval(Container.DataItem, "Email") %></td>
            <td><%# DataBinder.Eval(Container.DataItem, "Registered") %></td>
            <td><asp:Label id="lblCountry" runat="server" /></td>
            <td>
                <asp:Image id="imgActive" ImageUrl="~/IMAGE_NAME" runat="server" />
                <asp:Image id="imgInactive" ImageUrl="~/IMAGE_NAME" runat="server" />
            </td>
        <tr>
    </ItemTemplate>
    

    aspx.cs 文件的代码:

    protected void RP_Persons_OnItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
               Person person = (Person)e.Item.DataItem;
               ((Label)e.Item.FindControl("lblCountry")).Text = person.Country.Name;
               if(person.IsActive) {
                  ((Image)e.Item.FindControl("imgActive")).Visible = True;
                  ((Image)e.Item.FindControl("imgInactive")).Visible = False;
               }
               else {
                  ((Image)e.Item.FindControl("imgActive")).Visible = False;
                  ((Image)e.Item.FindControl("imgInactive")).Visible = True;
               }
            }
        }
    

    【讨论】:

    • 谢谢。正是我想要的。我的问题的更清洁的解决方案。
    【解决方案2】:

    就这么简单:

    <td><%# DataBinder.Eval(Container.DataItem, "Country.Name") %></td>
    

    现在我只需要弄清楚如何处理布尔值并显示图像而不是真/假。

    (编辑) ....我找到了一种在真/假图像之间切换的方法。我觉得它相当笨拙,所以我愿意改进。

    <%# DataBinder.Eval(Container.DataItem, "IsActive").ToString() == "True" ? "<span class='label label-success'>Active</span>" : "<span class='label'>Inactive</span>"%>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-24
      • 1970-01-01
      • 2010-11-01
      • 2012-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-02
      相关资源
      最近更新 更多