Domanda

Ho dei problemi con la visualizzazione il mio oggetto in un DataList.

Il mio scopo loks in questo modo:

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;
    }
}

Quando si tenta di visualizzare in un DataList il nome del corso sembra ok. Ma le date non vengono mostrati.

Così ho pensato che mi serviva un datalist nidificato, ma poi non so come riempire la seconda DataList con le date nell'oggetto.

È stato utile?

Soluzione

Ho mostrare due soluzioni:

<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>

e

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();
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top