Question

Je ne parviens pas à afficher mon objet dans une datalist.

Mon objet loks comme ceci:

public class Course
{
    private string courseName;
    private DateTime[] courseDates;

    public string CourseName
    {
        get { return courseName; }
        set { courseName = value; }
    }
    public DateTime[] CourseDates
    {
        get { return courseDates; }
        set {
            foreach (DateTime dt in courseDates)
            {
                if (dt < DateTime.Now)
                    throw new Exception("The date of the course has to be after todays date.");
            }
            courseDates = value; }
    }

    public Course(string _courseName, DateTime[] _courseDates)
    {
        courseName = _courseName;
        courseDates = _courseDates;
    }
}

Lorsque je tente de l'afficher dans un datalist le nom du cours semble correct. Mais les dates ne sont pas représentés.

Je pensais que je avais besoin d'un datalist imbriqué, mais je ne sais pas comment remplir la deuxième datalist avec les dates de l'objet.

Était-ce utile?

La solution

J'ai montrer deux solutions:

<asp:DataList ID="DataList1" runat="server" 
        onitemdatabound="DataList1_ItemDataBound"> 
    <ItemTemplate>
        <td><%# DataBinder.Eval(Container.DataItem, "CourseName")%></td>
        <td><%# RenderDates( DataBinder.Eval(Container.DataItem, "CourseDates"))%></td>
        <td>
            <asp:DataList ID="DateList" runat="server">
                <ItemTemplate>
                    <td><%# Container.DataItem%></td>
                </ItemTemplate>
            </asp:DataList>            
        </td>
    </ItemTemplate>       
</asp:DataList>

et

public string RenderDates(object dates)
{
    DateTime[] ds = dates as DateTime[];
    StringBuilder sb = new StringBuilder();
    if( ds != null && ds.Length > 0)
    {
        sb.Append(ds[0]);
        for (int i = 1; i < ds.Length; i++)
        {
            sb.AppendFormat(" - {0}", ds[i]);
        }
    }
    return sb.ToString();
}

protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
{
    DataListItem item = e.Item;
    if ((item.ItemType == ListItemType.Item) ||
        (item.ItemType == ListItemType.AlternatingItem))
    {
        var innerList= (DataList)item.FindControl("DateList");
        innerList.DataSource = ((Course) item.DataItem).CourseDates;
        innerList.DataBind();
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top