2

コレクションList<Person>Persons があり、Person には Country (Country.Name) があります。リピーターをコレクションに正常にバインドしましたが、国名を書き出そうとすると問題が発生します。また、人物に 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>
4

2 に答える 2

3

回答で提供した方法は機能しますが、私見では、このタイプのコードは、コード ビハインドで達成および維持するのが簡単です。

これを行う方法は次のとおりです。

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;
           }
        }
    }
于 2013-05-28T16:03:01.453 に答える
1

それがそうであったのと同じくらい簡単です:

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

ここで、ブール値を処理し、true/false の代わりに画像を表示する方法を理解する必要があります。

(編集) ....そして、真/偽の画像を切り替える方法を見つけました。かなりぎこちないので、改善の余地があります。

<%# DataBinder.Eval(Container.DataItem, "IsActive").ToString() == "True" ? "<span class='label label-success'>Active</span>" : "<span class='label'>Inactive</span>"%>
于 2013-05-26T21:42:40.740 に答える