对象和嵌套数据表

时间:2009-12-29 13:27:16

标签: asp.net object nested-datalist

我无法在datalist中显示我的对象。

我的对象是这样的:

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

当我尝试在数据列表中显示它时,课程名称看起来不错。但是没有显示日期。

所以我想我需要一个嵌套的datalist,但后来我不知道如何用对象中的日期填充第二个datalist。

1 个答案:

答案 0 :(得分:1)

我展示了两种解决方案:

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

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