David Cleeton Ответов: 0

Добавление праздничных дат в ретранслятор 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;
    }

}


Любая помощь очень ценится.

0 Ответов