2009-12-29 10 views
1

J'ai des problèmes pour afficher mon objet dans une base de données.Datalistes imbriqués et objets

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 montrées.

Donc je pensais que j'avais besoin d'un datalist imbriqué, mais je ne sais pas comment remplir le second datalist avec les dates dans l'objet.

+0

Comment voulez-vous que les dates affichées? Un par colonne, ou concaténé en quelque sorte? –

+0

Pouvez-vous fournir le code que vous utilisez pour créer et lier le datalist, peut-être que c'est quelque chose. –

Répondre

1

J'ai montre 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(); 
    } 
} 
+0

Je pensais qu'il y aurait un moyen plus simple. Cependant, cela fonctionne très bien. Merci! – Fred

Questions connexes