Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用嵌套中继器时发生异常_C#_Asp.net_.net_Repeater_Nested Repeater - Fatal编程技术网

C# 使用嵌套中继器时发生异常

C# 使用嵌套中继器时发生异常,c#,asp.net,.net,repeater,nested-repeater,C#,Asp.net,.net,Repeater,Nested Repeater,我有一个包含所有数据的数据表,名为dtData。该数据表包含任务描述,每个任务描述都有一个任务截止日期 以下是我想做的: 用户从下拉列表中选择月份和年份,然后单击按钮。 根据所选月份的天数,将生成多个面板。(如果有30天,则生成30个面板) 每个面板对应于当月的一天,并相应地显示日期。 如果面板上显示的日期与“我的数据”的任务到期日期匹配,则相应的任务说明将显示在面板中 我已经能够根据需要呈现日历视图,但由于某些原因,在尝试使用以下代码显示必要的任务描述时,抛出了一个NullReferenceE

我有一个包含所有数据的数据表,名为dtData。该数据表包含任务描述,每个任务描述都有一个任务截止日期

以下是我想做的: 用户从下拉列表中选择月份和年份,然后单击按钮。 根据所选月份的天数,将生成多个面板。(如果有30天,则生成30个面板)

每个面板对应于当月的一天,并相应地显示日期。 如果面板上显示的日期与“我的数据”的任务到期日期匹配,则相应的任务说明将显示在面板中

我已经能够根据需要呈现日历视图,但由于某些原因,在尝试使用以下代码显示必要的任务描述时,抛出了一个NullReferenceException。 我调试了代码,在包含异常的循环第二次运行时,异常被抛出到下一行(它第一次运行得非常好):

这是我的完整代码:

我的aspx:

<asp:Repeater ID="rptr_timeline" runat="server" OnItemDataBound="GetChildData">

    <ItemTemplate>

        <asp:Panel ID="pnl_timeline" runat="server" BackColor="LightGray" BorderColor="Black" BorderStyle="Solid" BorderWidth="1px">

        &nbsp;<span id="span_day">Day</span>&nbsp;<asp:Label ID="lbl_day_number" runat="server" Text='<%# Eval("Day_Number").ToString() %>'></asp:Label>&nbsp;&nbsp;

        <span id="span_date">Date:</span>&nbsp;<asp:Label ID="lbl_day_date" runat="server" Text='<%# Eval("Day_Date").ToString() %>'></asp:Label>&nbsp;&nbsp;

        <asp:Label ID="lbl_day_name" runat="server" Text='<%# Eval("Day_Name").ToString() %>'></asp:Label><br />

        <asp:Repeater ID="rptr_tasks" runat="server">
            <ItemTemplate>
                <asp:Label ID="lbl_task_name" runat="server" Text='<%# Eval("taskdescription_responsible").ToString() %>'></asp:Label>
            </ItemTemplate>
            <SeparatorTemplate>
                <br /><br />
            </SeparatorTemplate>
        </asp:Repeater>

        </asp:Panel>

    </ItemTemplate>
    <SeparatorTemplate>
        <br />
    </SeparatorTemplate>
</asp:Repeater>

添加检查当前绑定项是否为项。或者在GetChildData方法中替换它们

protected void GetChildData(Object sender, RepeaterItemEventArgs e)
{
  if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
  {
    //Do binding
  }

}

嘿,谢谢!:-)这解决了空引用异常。。。。但现在它抛出另一个异常:System.FormatException:String未被识别为有效的日期时间。在System.Convert.ToDateTime(字符串值,IFormatProvider提供程序)在System.String.System.IConvertible.ToDateTime(IFormatProvider提供程序)在System.Convert.ToDateTime(对象值)在System.Convert以此类推……看起来您创建的字符串具有dd/mm/yyyy格式的字符串化日期值,然后尝试对其进行解析,但当前的.NET线程区域性设置有另一种日期格式。为什么不在Day\u date列中存储日期值?新建行[“日期”]=新建日期时间(所选年份,转换为32(drpdwn\U月,选择编辑项值),计数器);然后我将如何引用父中继器的数据(在GetChildData方法中存储在“Day_Date”中的数据???类似于:(DateTime)((System.data.DataRowView)(e.Item.DataItem)).Row.ItemArray[1];
protected void Load_Dateline(object sender, EventArgs e)
{
    try
    {
        int counter = 0;
        int months_days_number = 0;
        int month_selected = 0;
        int year_selected = 0;

        month_selected = Convert.ToInt32(drpdwn_month.SelectedItem.Value);
        year_selected = Convert.ToInt32(drpdwn_year.SelectedItem.Value);

        months_days_number = DateTime.DaysInMonth(year_selected, month_selected);

        DataTable dtMonthdays = new DataTable();
        dtMonthdays.Columns.Add("Day_Number");
        dtMonthdays.Columns.Add("Day_Date");
        dtMonthdays.Columns.Add("Day_Name");
        dtMonthdays.Columns.Add("ProperDate");

        for (counter = 1; counter <= months_days_number; counter++)
        {
            DataRow new_row = dtMonthdays.NewRow();
            if (counter < 10)
            {
                new_row["Day_Number"] = "0" + counter.ToString();
            }
            else
            {
                new_row["Day_Number"] = counter.ToString();
            }
            new_row["Day_Date"] = counter.ToString() + "/" + drpdwn_month.SelectedItem.Value.ToString() + "/" + year_selected.ToString();

            DateTime temp_date = new DateTime(year_selected, month_selected, counter);

            new_row["Day_Name"] = temp_date.ToString("dddd");

            dtMonthdays.Rows.Add(new_row);

        }

        rptr_timeline.DataSource = dtMonthdays;
        rptr_timeline.DataBind();
    }
    catch (Exception ex)
    {
        lbl_error.Text = "Something went wrong!<br /><br />" + ex.ToString();
    }
}
protected void GetChildData(Object sender, RepeaterItemEventArgs e)
{
    Repeater nestedRepeater = e.Item.FindControl("rptr_tasks") as Repeater;
    DataTable dt_new = dtData.Clone();

    DateTime p_time = Convert.ToDateTime(((System.Data.DataRowView)(e.Item.DataItem)).Row.ItemArray[1]);

    foreach (DataRow dr in dtData.Rows)
    {
        if (DateTime.Parse(dr["taskduedate_responsible"].ToString()).Equals(p_time.ToString()))
        {
            dt_new.ImportRow(dr);
        }
    }

    if (dt_new != null && dt_new.Rows.Count != 0)
    {
        nestedRepeater.DataSource = dt_new;
        nestedRepeater.DataBind();
    }
}
protected void GetChildData(Object sender, RepeaterItemEventArgs e)
{
  if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
  {
    //Do binding
  }

}