1

asp:Calendar コントロールで週番号を表示する簡単な方法はありますか? この投稿を見つけましたが、2008年の投稿です。もっと簡単な方法があるかもしれないと思いましたか?

私はasp.net c# 4.0で開発しています。

ありがとう

4

3 に答える 3

1

イベントを使用してDayRender、週番号をセルに追加できます。

protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
{
    int weeknum = CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(
            e.Day.Date,
            CultureInfo.CurrentCulture.DateTimeFormat.CalendarWeekRule,
            CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek
    );
    e.Cell.Controls.Add(new LiteralControl(string.Format("({0})", weeknum)));
}

常に週番号をセルに追加するため、それが十分にかわいくない場合は、リンクを使用してください。

于 2013-02-05T16:32:01.710 に答える
0

同じ構文は引き続き機能するはずです。週の計算は文化によって異なるため、週番号 53 が表示されてもバグではないことに注意してください。

using System.Globalization;

CultureInfo cultInfo = CultureInfo.CurrentCulture;
int weekNumNow = cultInfo.Calendar.GetWeekOfYear(DateTime.Now,
                         cultInfo.DateTimeFormat.CalendarWeekRule,
                         cultInfo.DateTimeFormat.FirstDayOfWeek);
于 2013-02-05T16:29:18.100 に答える
0

週を変更するためにそのコードを機能させることもできました。コードは次のとおりです。

コードビハインド:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        eventsDayView.DataLoad(DateTime.Now);
        calendar.SelectedDate = DateTime.Now;
        calendar.TodaysDate = DateTime.Now;
        calendar.VisibleDate = DateTime.Today;
        addWeekNumberColumn();
    }
}

private void addWeekNumberColumn()
{
    // Get the date shown in the calendar control
    DateTime curMonth = calendar.VisibleDate;

    // Find first day of the current month
    curMonth = Convert.ToDateTime(curMonth.Year.ToString() + "-" + curMonth.Month.ToString() + "-01");

    // Build javascript
    string jscript = "<script type='text/javascript'> addWkColumn('" + calendar.ClientID + "', " + getISOWeek(curMonth).ToString() + ");</script>";

    // Add script to page for execution of addWkColumn javascript function
    Page.ClientScript.RegisterStartupScript(this.GetType(), "AddWeeknumbers", jscript);
}

// Helper function to find ISO week
private int getISOWeek(DateTime day)
{
    return System.Globalization.CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(day, System.Globalization.CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
}

protected void calendar_OnVisibleMonthChanged(object sender, MonthChangedEventArgs e)
{
    calendar.VisibleDate = e.NewDate;
    addWeekNumberColumn();
}

ASP:

<script type="text/javascript">
        function addWkColumn(tblId, wkStart) {
            var tbl = document.getElementById(tblId);
            var tblBodyObj = tbl.tBodies[0];
            for (var i = 0; i < tblBodyObj.rows.length; i++) {
                // Month Header
                if (i == 0) {
                    // Add extra colspan column
                    tblBodyObj.rows[i].cells[0].colSpan = 8;
                }
                // Week Header
                if (i == 1) {
                    // Add week column headline
                    var newCell = tblBodyObj.rows[i].insertCell(0);
                    newCell.innerHTML = 'wk';
                    newCell.style.fontSize = '8px';
                    newCell.style.fontWeight = 'bold';
                    newCell.style.verticalAlign = 'bottom';
                    newCell.style.backgroundColor = '#ffffee';
                }
                // Normal row
                if (i >= 2) {
                    // Add the weeknumbers 
                    var newCell = tblBodyObj.rows[i].insertCell(0);
                    newCell.innerHTML = wkStart;
                    wkStart += 1;
                    if (wkStart == 53) {
                        wkStart = 1;
                    }
                    newCell.style.fontSize = '8px';
                    newCell.style.backgroundColor = '#ffffee';
                }
            }
        }
    </script>

<asp:Calendar ID="calendar" runat="server" Font-Names="Tahoma" Font-Size="11px" NextMonthText="&raquo;"
                                                    PrevMonthText="&laquo;" SelectMonthText="&raquo;" SelectWeekText="&rsaquo;" CssClass="myCalendar"
                                                    BorderStyle="None" CellPadding="1" OnSelectionChanged="calendar_SelectionChanged" OnDayRender="calendar_dayrender"
                                                    meta:resourcekey="calendarResource1" FirstDayOfWeek="Monday" OnVisibleMonthChanged="calendar_OnVisibleMonthChanged">
                                                    <DayHeaderStyle CssClass="myCalendarDayHeader" />
                                                    <DayStyle CssClass="myCalendarDay" />
                                                    <NextPrevStyle CssClass="myCalendarNextPrev" />
                                                    <OtherMonthDayStyle ForeColor="Gray" />
                                                    <SelectedDayStyle Font-Bold="True" />
                                                    <SelectorStyle CssClass="myCalendarSelector" />
                                                    <TitleStyle CssClass="myCalendarTitle" />
                                                    <TodayDayStyle ForeColor="Red" Font-Bold="True" />
                                                </asp:Calendar>
于 2013-02-11T12:20:12.143 に答える