質問

私はデータリストリストに自分のオブジェクトを表示するのに苦労しています。

私のオブジェクトはこのようなものです:

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

データリストリストに表示しようとすると、コースの名前は大丈夫に見えます。しかし、日付は表示されません。

だから私はネストされたデータリストが必要だと思っていましたが、その後、2番目のデータリストをオブジェクトの日付で埋める方法がわかりません。

役に立ちましたか?

解決

私は2つの解決策を示しています:

<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();
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top