搜尋此網誌

2012-02-01

CalendarExtender 民國年

用debug測試才知道原因是出在,當textbox有預設值時,
CalendarExtender會把textbox的值,當成default選擇日期,
所以它會把民國1010101當成西元1010101,
如果你仔細去看它的月曆,你會發現那根本不對.

知道原因之後就可以解了,
在CalendarExtender顯示前,把textbox換成西元年,並把它塞給CalendarExtender.
在CalendarExtender隱藏前,若textbox是西元年,就把textbox換回成民國年.
目前先用我爛爛的javascript去處理...

HTML
Page Is PostBack:<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<br />
Default:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<br />
Select:<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<br />
<asp:ImageButton runat="Server" ID="Image1" ImageUrl="~/images/Calendar_scheduleHS.png"
 AlternateText="Click to show calendar" />
<br />
<asp:CalendarExtender ID="CalendarExtender1" runat="server" TargetControlID="TextBox2"
 DaysModeTitleFormat="yyyyMMMM" TodaysDateFormat="yyyyMMdd" Format="yyyyMMdd" 
  FirstDayOfWeek="Sunday" PopupButtonID="Image1" 
OnClientDateSelectionChanged="toLocalDate" OnClientShowing="toAd" OnClientHiding="toRoc">
</asp:CalendarExtender>

javascript
<script type="text/javascript">
        $(function () {
            $('#tabs').tabs();
            if (!isPostBack) {
                $('#TextBox1').val(getNowDate());
            }
        });
        function getNowDate() {
            var d = new Date();
            var yy = d.getFullYear();
            var mm = d.getMonth() + 1;
            if (mm < 10) {
                mm = '0' + mm;
            }
            var dd = d.getDate();
            if (dd < 10) {
                dd = '0' + dd;
            }
            return yy + '' + mm + '' + dd;
        }
        function toLocalDate(sender, clientside_arguments) {
            var selectedDate = sender.get_selectedDate();
            var DateValue = sender._textbox.get_Value();
            var year = parseInt(DateValue.substr(0, 4)) - 1911;
            sender._textbox.set_Value(year + DateValue.substr(4, 4));
        }
        function toAd(sender, clientside_arguments) {
            var DateValue = sender._textbox.get_Value();
            var len = DateValue.length;
            if (len == 7) {
                var yy = parseInt(DateValue.substr(0, 3)) + 1911;
                var mm = parseInt(DateValue.substr(3, 2)) - 1;
                var dd = DateValue.substr(5, 2);
                var fullyy = yy;
                var newDate = yy + mm + dd;
                sender._textbox.set_Value(newDate);

                var utc = new Date();
                utc.setUTCFullYear(fullyy, mm, dd);
                sender.set_selectedDate(utc);
            }
        }
        function toRoc(sender, clientside_arguments) {
            var DateValue = sender._textbox.get_Value();
            var len = DateValue.length;
            if (len == 8) {
                var yy = parseInt(DateValue.substr(0, 4)) - 1911;
                var mm = DateValue.substr(4, 2);
                var dd = DateValue.substr(6, 2);
                var fullyy = DateValue.substr(0, 4);
                var newDate = yy + mm + dd;
                sender._textbox.set_Value(newDate);
            }
        }
    </script>

cs
protected void Page_Load(object sender, EventArgs e)
        {
            Label1.Text = Page.IsPostBack.ToString().ToLower();
            
            bool isPostBack = Page.IsPostBack;
            ClientScript.RegisterClientScriptBlock(GetType(), "IsPostBack", "var isPostBack = " + isPostBack.ToString().ToLower() + ";", true);
            if (!isPostBack)
            {
            DateTime now = DateTime.Now;
            TaiwanCalendar tc = new TaiwanCalendar();
            string today = tc.GetYear(now).ToString("000") + tc.GetMonth(now).ToString("00") + tc.GetDayOfMonth(now).ToString("00");
            this.TextBox2.Text = today;
            }

        }

沒有留言: