<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      DatePicker(日期選擇自定義服務器控件)的完成

      [摘要]在DotNet中有用戶自定義控件(.ascx)和服務器控件(程序代碼)WebControl 類提供所有 Web 服務器控件的公共屬性、方法和事件。通過設置在此類中定義的屬性,可以控制 Web 服務器...
      在DotNet中有用戶自定義控件(.ascx)和服務器控件(程序代碼)

      WebControl 類提供所有 Web 服務器控件的公共屬性、方法和事件。通過設置在此類中定義的屬性,可以控制 Web 服務器控件的外觀和行為。

      例如在Community中DatePicker控件的實現

      public class DatePicker : WebControl, INamingContainer {

      DropDownList dropMonth;

      DropDownList dropDay;

      DropDownList dropYear;



      public int Month {

      get {

      if (ViewState["Month"] == null)

      return DateTime.Now.Month;

      else

      return (int)ViewState["Month"];

      }

      set { ViewState["Month"] = value; }

      }



      public int Day {

      get {

      if (ViewState["Day"] == null)

      return DateTime.Now.Day;

      else

      return (int)ViewState["Day"];

      }

      set { ViewState["Day"] = value; }

      }



      public int Year {

      get {

      if (ViewState["Year"] == null)

      return DateTime.Now.Year;

      else

      return (int)ViewState["Year"];

      }

      set {

      ViewState["Year"] = value;

      }

      }



      public DateTime Date {

      get {

      //確定服務器控件是否包含子控件。如果不包含,則創建子控件。

      EnsureChildControls();



      int _year = Int32.Parse(dropYear.SelectedItem.Value);

      int _month = Int32.Parse(dropMonth.SelectedItem.Value);

      int _day = Int32.Parse(dropDay.SelectedItem.Value);



      if (_day > DateTime.DaysInMonth(_year, _month) )

      throw new ArgumentException("Invalid date!");



      return new DateTime

      (

      _year,

      _month,

      _day

      );

      }

      set {

      Month = value.Month;

      Day = value.Day;

      Year = value.Year;

      }

      }



      /// <summary>

      /// 通知使用基于合成的實現的服務器控件創建它們包含的任何子控件,以便為回發或呈現做準備。

      /// 當開發復合服務器控件或模板服務器控件時,必須重寫此方法。

      /// </summary>

      protected override void CreateChildControls() {

      dropMonth = new DropDownList();

      Controls.Add(dropMonth);



      dropDay = new DropDownList();

      Controls.Add(dropDay);



      dropYear = new DropDownList();

      Controls.Add(dropYear);



      if (!Page.IsPostBack) {

      // Get a DateTimeFormatInfo object

      DateTimeFormatInfo objDateInfo = DateTimeFormatInfo.CurrentInfo;



      // Display Months

      for (int i=1;i<objDateInfo.MonthNames.Length;i++)

      dropMonth.Items.Add(new ListItem(objDateInfo.GetMonthName(i), i.ToString()));



      // Display Days

      for (int i=1;i<32;i++)

      dropDay.Items.Add(i.ToString());



      // Display Years

      for (int i=DateTime.Now.Year - 5;i<DateTime.Now.Year+5;i++)

      dropYear.Items.Add(i.ToString());





      dropMonth.Items.FindByValue(Month.ToString()).Selected = true;

      dropDay.Items.FindByValue(Day.ToString()).Selected = true;

      dropYear.Items.FindByValue(Year.ToString()).Selected = true;

      }



      }



      /// <summary>

      /// 將服務器控件內容發送到提供的 HtmlTextWriter 對象,此對象編寫將在客戶端呈現的內容。

      /// 在開發自定義服務器控件時,可以重寫此方法以生成 ASP.NET 頁的內容。

      /// </summary>

      /// <param name="tw">HtmlTextWriter 對象</param>

      protected override void Render(HtmlTextWriter tw) {

      // Get Date Parts

      string[] dateParts;

      try {

      DateTimeFormatInfo objDateInfo = DateTimeFormatInfo.CurrentInfo;

      //modify by yukh ,because in some objDateInfo.ShortDatePattern seperate by "-" eg: yyyy-M-d

      if (objDateInfo.ShortDatePattern.IndexOf("/")>0)

      dateParts = objDateInfo.ShortDatePattern.Split('/');

      else

      dateParts = objDateInfo.ShortDatePattern.Split('-');



      }

      catch {

      dateParts = new string[]{"m","d","y"};

      }

      tw.RenderBeginTag(HtmlTextWriterTag.Table);

      tw.RenderBeginTag(HtmlTextWriterTag.Tr);

      tw.RenderBeginTag(HtmlTextWriterTag.Td);

      RenderDatePart(dateParts[0],tw);

      tw.RenderEndTag();



      tw.RenderBeginTag(HtmlTextWriterTag.Td);

      RenderDatePart(dateParts[1],tw);

      tw.RenderEndTag();



      tw.RenderBeginTag(HtmlTextWriterTag.Td);

      RenderDatePart(dateParts[2],tw);

      tw.RenderEndTag();



      tw.RenderEndTag(); // close row

      tw.RenderEndTag(); // close table





      }



      private void RenderDatePart(string datePart,HtmlTextWriter tw) {

      datePart = datePart.ToLower();



      if (datePart.StartsWith("m"))

      dropMonth.RenderControl(tw); //將服務器控件子級的內容輸出到提供的 HtmlTextWriter 對象,

      //此對象編寫將在客戶端呈現的內容。

      else

      if (datePart.StartsWith("d"))

      dropDay.RenderControl(tw);

      else

      dropYear.RenderControl(tw);

      }

      }




      日韩精品一区二区三区高清