2

現在、一部のコンテンツの表示に問題がありListViewます。通常の C#StudentクラスとClassroomクラスがあります。クラスには、以下に示すクラスClassroomのリストが含まれています。Student

public class Classroom
{
    int classroomid {set;get;}
    List<Students> students{set;get;}
}

私の質問は、DataSourceListViewを のオブジェクトのリストにバインドする場合、 のリストClassroomをどのようにレンダリングするのですか?StudentListView

<ListView>
    <ItemTemplate>
        <asp:Label Text='<%# Eval("classroomid") %>'></asp:Label>
        <asp:Label Text='<%# Eval("students") %>'</asp:Label>
        <asp:Label Text='<%# Eval("students.name") %>'</asp:Label>
    </ItemTemplate>
</ListView>

上記のコードは基本的に、私が達成しようとしていることを説明しているか、名前などの学生の詳細を表示している可能性があります。それを達成する方法はありますか? 入れ子になっていることは理解してListViewいますが、実装方法はわかりません。よろしくお願いいたします。:-)

4

1 に答える 1

1

使用できますstring.Join

<asp:Label runat="server" ID="LblStudents"
    Text='<%# string.Join(",", (List<string>)Eval("students")) %>'>
</asp:Label>

編集Student:それがカスタムタイプであることを見逃しました。したがって、読みやすくするために、ListView のItemDataBoundイベントでこれを行う必要があります。

ただし、aspx でも動作するはずです。

<asp:Label runat="server" ID="LblStudents"
    Text='<%# string.Join(",", ((List<Student>)Eval("students")).Select(s=>s.Name)) %>'>
</asp:Label>

コードビハインドで:

protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
{
    if (e.Item.ItemType == ListViewItemType.DataItem)
    {
        Label LblStudents = (Label)e.Item.FindControl("LblStudents");

        Classroom cr = e.Item.DataItem as Classroom;
        if (cr != null && cr.students != null && cr.students.Count > 0)   
        {
            LblStudents.Text = string.Join(",", cr.students.Select(s => s.Name));
        }
    }
}
于 2012-05-14T13:04:54.747 に答える