2009-12-29 213 views
1

我無法在數據列表中顯示我的對象。對象和嵌套數據列表

我的目標loks這樣的:

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

當我嘗試在數據列表課程的名字看起來OK顯示它。但日期不顯示。

所以我想我需要一個嵌套的datalist,但是我不知道如何用對象中的日期填充第二個數據列表。

+0

你怎麼想的日期顯示?每列一列,或以某種方式連接在一起? – 2009-12-29 13:38:34

+0

您可以提供您用於創建和綁定數據列表的代碼,也許是那裏的東西。 – 2009-12-29 13:48:00

回答

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

我認爲會有一個更簡單的方法。但是,這很好。 謝謝! – Fred 2009-12-30 07:11:14