Добавление праздничных дат в ретранслятор ASP с помощью C#
У меня есть два ретранслятора, один вложен в другой.
Первый ретранслятор создает 12 рядов, по одному на каждый месяц года. Он вычисляет количество дней для каждого месяца по очереди и добавляет их в массив. Затем массив используется в качестве источника данных для второго ретранслятора.
Второй ретранслятор проверяет дни каждого месяца и устанавливает цвет фона тд, если день недели приходится на субботу или воскресенье.
Все это работает правильно и делает то, что мне нужно.
Далее мне нужно запросить таблицу базы данных SQL, содержащую список праздничных дат. Таблица содержит дату начала праздника, количество проведенных дней и шестнадцатеричный цветовой код.
Я хочу, чтобы он нашел дату начала в rptAbsenceDays_ItemDataBound и, используя количество дней и цветовое значение, отобразил ее аналогично второй ссылке. Эта информация хранится в скрытых полях.
Эта первая ссылка - то, что я пытаюсь создать: Шоу праздники и выходные дни[^]
Эта ссылка-это то, что мне удалось до сих пор Только шоу по выходным[^]
Как я могу позвонить в StaffAbsence и заставить его показать праздники
Что я уже пробовал:
Это код для страницы
<div class="tab-pane fade" id="Absence"> <div class="col-md-12"> <table> <thead> <tr> <th> <asp:Literal ID="litYear" runat="server"></asp:Literal> </th> <%--Creates a row of 31 days along the top of the repeater--%> <% for (int iWeek = 1; iWeek <= 31; iWeek++) { %> <th style="width:30px; text-align:center; background-color:darkgray;"" > <%= iWeek %> </th> <% } %> </tr> </thead> <asp:Repeater ID="rptAbsenceMonths" runat="server" OnItemDataBound="rptAbsenceMonths_ItemDataBound"> <ItemTemplate> <tr> <td> <asp:Literal ID="litMonth" runat="server" /> </td> <asp:Repeater ID="rptAbsenceDays" runat="server" OnItemDataBound="rptAbsenceDays_ItemDataBound"> <ItemTemplate> <td id="tdDay" runat="server"> <asp:Literal ID="litDay" runat="server" /> <asp:HiddenField ID="hidAbsenceStartDate" runat="server" Value='<%#DataBinder.Eval(Container.DataItem,"ScheduleStartDate")%>'/> <asp:HiddenField ID="hidAbsenceTotalDays" runat="server" Value='<%#DataBinder.Eval(Container.DataItem,"ScheduleDays")%>'/> <asp:HiddenField ID="hidAbsenceColour" runat="server" Value='<%#DataBinder.Eval(Container.DataItem,"ScheduleColour")%>'/> </td> </ItemTemplate> </asp:Repeater> </tr> </ItemTemplate> </asp:Repeater> </table> </div> <div class="clearfix"></div> </div> <%--Absence--%>
Ниже приведен мой код C#
protected void AbsenceMonths() { litYear.Text = DateTime.Now.Year.ToString(); rptAbsenceMonths.DataSource = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; rptAbsenceMonths.DataBind(); }
protected void rptAbsenceMonths_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { Repeater rptAbsenceDays = (Repeater)e.Item.FindControl("rptAbsenceDays"); Literal litMonth = (Literal)e.Item.FindControl("litMonth"); _currentBindingMonth = (int)e.Item.DataItem; _absenceMonth = new DateTime(DateTime.Now.Year, _currentBindingMonth, 1); litMonth.Text = _absenceMonth.ToString("MMM"); int numberOfDays = System.DateTime.DaysInMonth(Convert.ToInt16(litYear.Text), _currentBindingMonth); DateTime[] monthdays = new DateTime[numberOfDays]; for (int i = 0; i < numberOfDays; i++) { monthdays[i] = _absenceMonth; _absenceMonth = _absenceMonth.AddDays(1); } rptAbsenceDays.DataSource = monthdays; rptAbsenceDays.DataBind(); } }
protected void rptAbsenceDays_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { DateTime date = (DateTime)e.Item.DataItem; Literal litDay = (Literal)e.Item.FindControl("litDay"); HtmlTableCell tdDay = (HtmlTableCell)e.Item.FindControl("tdDay"); if(date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday) { tdDay.Style.Add("background-color", "#D0D0D0"); } tdDay.ID = string.Empty; } }
protected void StaffAbsence(int StaffID, int AbsenceYear) { SqlCommand cmd = new SqlCommand("sp_GetStaffAbsence", cnn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@EmpCode", StaffID); cmd.Parameters.AddWithValue("@Year", AbsenceYear); DataTable dt = new DataTable(); SqlDataAdapter adapt = new SqlDataAdapter(cmd); adapt.Fill(dt); if (dt.Rows.Count > 0) { //rptAbsenceDays.DataSource = dt; //rptAbsenceDays.DataBind(); //rptAbsenceDays.Visible = true; } }
Любая помощь очень ценится.