آموزش برنامه نویسی ، پایگاه داده sql server
آموزشگاه برنامه نویسی تحلیل داده : دوره های آموزشی برنامه نویسی و طراحی وب ASP.Net , C# , HTML , CSS , SQL Server


آموزشگاه برنامه نویسی مجتمع فنی تهران میرداماد : دوره های آموزشی برنامه نویسی و طراحی وب ASP.Net , C# , HTML , CSS , SQL Server

آموزش ASP.Net > کنترل های استاندارد ASP.Net > کنترل Calendar
نمایش تاریخ های انتخاب شده در یک پایگاه داده توسط کنترل تقویم Calendar

Skip Navigation Links.

مقدمه :

کنترل Calendar به صورت مستقیم از اتصال داده ها پشتیبانی نمی کند ، بنابراین شما نمی توانید این کنترل را به صورت مستقیم به یک منبع داده ای متصل کنید .
در عوض شما بایستی از طریق اشیای ADO.NET ، اطلاعات و تاریخ ها را از منبع داده ای خوانده و سپس آنها را با تاریخ های موجود در کنترل مقایسه کرده و یا به صورت مستقیم جهت نمایش وارد نمایید .

نحوه نمایش اطلاعات پایگاه داده در کنترل تقویم Calendar :

  1. از یک شی ADO.NET برای اتصال و خواندن اطلاعات از منبع داده ای استفاده نمایید .
  2. درون رویداد DayRender کنترل تقویم ، تاریخ روزی که در حال ایجاد و Render شدن است را با تاریخ های خوانده شده از منبع داده ای مقایسه نموده و در صورت داشتن موارد مشابه ، سپس به تعیین نحوه نمایش آنها اقدام نمایید . همانند مثال زیر .

مثال عملی :

مثال : مثال زیر ، اطلاعات روزهای تعطیل را از یک پایگاه داده خوانده و آنها را درون یک شی DataSet در ADO.Net می ریزد . این اطلاعات مربوط به ماه جاری است که تاریخ آن از طریق شی VisibleDate کنترل Calendar به برنامه اعلام می شود .
هر بار که کاربر به یک ماه جدید حرکت کند ، کد ، اطلاعات روزهای تعطیل آن ماه را از پایگاه داده خوانده می شود . سپس در متد DayRender کنترل ، کد نوشته شده ، روزهای ماه جاری را با روزهای بدست امده از پایگاه داده مقایسه کرده و در صورت وجود تشابه ، آن روز یا روزها را با یک رنگ خاص نمایش می دهد .
به کد مثال زیر دقت نمایید . توضیحات تکمیلی نیز درباره کد قرار داده شده است .

توضیحات مثال : مثال زیر یک query را بر اساس تاریخ ماه جاری که در حال نمایش آن است ، می سارد .

خاصیت VisibleDate ،  تاریخ روز اول ماه در حال نمایش را برمی گرداند ( توجه داشته باشید که این خاصیت تا زمانی که کاریر بین ماه ها حرکت نکند ، تنظیم نمی شود . بنابراین برای اولین بار آن را در کد به صورت دستی تعیین می کنیم ) .

یک تابع کمکی نیز بر اساس مقدار خاصیت VisibleDate ، اولین روز ماه بعدی را حساب می کند . از این اطلاعات برای کار با پایگاه داده استفاده می شود .

کد کنترل
بر روی صفحه
<asp:Calendar ID="Calendar1" runat="server"   OnDayRender="Calendar1_DayRender" ></asp:Calendar>
C# کد
در فایل کد
protected DataSet dsHolidays;
  // DataSet تنظیم اولیه تاریخ کنترل تقویم و پرکردن شی
protected void Page_Load(object sender, EventArgs e)
  {
      if(!IsPostBack)
        { 
           Calendar1.VisibleDate = DateTime.Today;
           FillHolidayDataset();
         }
  }

protected void FillHolidayDataset()
  {
     DateTime firstDate = new DateTime(Calendar1.VisibleDate.Year,  Calendar1.VisibleDate.Month, 1);
     DateTime lastDate = GetFirstDayOfNextMonth();
     dsHolidays = GetCurrentMonthData(firstDate, lastDate);
   }

protected DateTime GetFirstDayOfNextMonth()
  {
     int monthNumber, yearNumber;
     if(Calendar1.VisibleDate.Month == 12)
       {
           monthNumber = 1;
           yearNumber = Calendar1.VisibleDate.Year + 1;
       }
    else
      {
          monthNumber = Calendar1.VisibleDate.Month + 1;
          yearNumber = Calendar1.VisibleDate.Year;
       }
    DateTime lastDate = new DateTime(yearNumber, monthNumber, 1);
    return lastDate;
  }


protected DataSet GetCurrentMonthData(DateTime firstDate, DateTime lastDate)
  {
     DataSet dsMonth = new DataSet();
     ConnectionStringSettings cs;
     cs = ConfigurationManager.ConnectionStrings["ConnectionString1"];
     String connString = cs.ConnectionString;
    SqlConnection dbConnection = new SqlConnection(connString);
    String query;
    query = "SELECT HolidayDate FROM Holidays " + _
    " WHERE HolidayDate >= @firstDate AND HolidayDate < @lastDate";
    SqlCommand dbCommand = new SqlCommand(query, dbConnection);
    dbCommand.Parameters.Add(new SqlParameter("@firstDate", firstDate));
    dbCommand.Parameters.Add(new SqlParameter("@lastDate", lastDate));

    SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(dbCommand);
    try
      {
          sqlDataAdapter.Fill(dsMonth);
      }
    catch {}
    return dsMonth;
  }


protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
  {
     DateTime nextDate;
     if(dsHolidays != null)
      {
         foreach(DataRow dr in dsHolidays.Tables[0].Rows)
            {
                nextDate = (DateTime) dr["HolidayDate"];
                if(nextDate == e.Day.Date)
                  {
                     e.Cell.BackColor = System.Drawing.Color.Pink;
                   }
              }
       }
   }

protected void Calendar1_VisibleMonthChanged(object sender, MonthChangedEventArgs e)
   {
       FillHolidayDataset();
   }



Skip Navigation Links.

راجع این مطلب سوال یا اشکالی دارید ؟! آن را در انجمن سایت مطرح نمایید ...         >>>>>  ورود به انجمن تخصصی


نطر خودتان درباره این صفحه را با ما در میان گذاشته و در صورت تمایل از Developer1 حمایت نمایید :

آیا مطالب این صفحه برای شما مناسب و مفید بوده است :

نام :                 
آدرس Email :    
 
نظر شما :  
 
سوال امنیتی : پایتخت ایران ؟      
حمایت از سایت Developer1