У меня есть дата, содержащая все мои данные, называемые dtData. В этом datatable содержатся описания задач с датой выполнения задачи для каждого описания задачи.Исключение при использовании вложенных повторителей
Вот что я хочу сделать: Пользователь выбирает месяц и год из выпадающего списка и нажимает кнопку. В зависимости от количества дней в выбранном месяце создается несколько панелей. (Если есть 30 дней, создается 30 панелей).
Каждая панель будет соответствовать одному из дней в месяце и будет отображать дату соответственно. Если дата, отображаемая на панели, соответствует дате задания для моих данных, то соответствующее описание задачи должно отображаться на панели.
Я был в состоянии вынести вид календаря, как я хочу, но по какой-то причине, пытаясь следующий код, чтобы отобразить необходимые описания задачи, NullReferenceException отбрасывается. я отлажен код и исключение на следующую строке для второго времени петли, которая содержит его запуск (Он работает прекрасно впервые):
DateTime p_time = Convert.ToDateTime(((System.Data.DataRowView)(e.Item.DataItem)).Row.ItemArray[1]);
Вот мой полный код:
Мой 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">
<span id="span_day">Day</span> <asp:Label ID="lbl_day_number" runat="server" Text='<%# Eval("Day_Number").ToString() %>'></asp:Label>
<span id="span_date">Date:</span> <asp:Label ID="lbl_day_date" runat="server" Text='<%# Eval("Day_Date").ToString() %>'></asp:Label>
<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>
И вот мой код позади:
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();
}
}
И называется на OnItemDataBound родительского ретранслятора следующим образом:
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();
}
}
Привет, спасибо! :-) Это отсортировало исключение ссылочной ссылки ... Но теперь это бросает другое исключение: System.FormatException: String не была признана действительной DateTime. в стилях System.DateTimeParse.Parse (String s, DateTimeFormatInfo dtfi, DateTimeStyles) в System.Convert.ToDateTime (значение String, поставщик IFormatProvider) в System.String.System.IConvertible.ToDateTime (поставщик IFormatProvider) в System.Convert.ToDateTime (Object value) и т. Д. ... –
похоже, что вы создаете строку со строковым значением даты в формате dd/mm/yyyy, а затем пытаетесь ее проанализировать, но текущие настройки культуры потока .NET имеют другой формат даты. Почему вы не храните значение даты в столбце Day_Date? new_row ["Day_Date"] = новый DateTime (year_selected, Convert.ToInt32 (drpdwn_month.SelectedItem.Value), счетчик); –
Как я могу ссылаться на данные родительского ретранслятора (тот, который хранится в «Day_Date» в методе GetChildData ??? –