آموزش ASP.Net > کنترل های استاندارد ASP.Net > کنترل Calendar
نمایش تاریخ های انتخاب شده در یک پایگاه داده توسط کنترل تقویم Calendar
مقدمه :
کنترل Calendar به صورت مستقیم از اتصال داده ها پشتیبانی نمی کند ، بنابراین شما نمی
توانید این کنترل را به صورت مستقیم به یک منبع داده ای متصل کنید .
در عوض شما بایستی از طریق اشیای
ADO.NET ، اطلاعات و تاریخ ها را از منبع داده ای خوانده و سپس آنها را با
تاریخ های موجود در کنترل مقایسه کرده و یا به صورت مستقیم جهت نمایش وارد نمایید .
نحوه نمایش اطلاعات پایگاه داده در کنترل تقویم Calendar :
- از یک شی
ADO.NET برای اتصال و خواندن اطلاعات از منبع داده ای استفاده نمایید .
- درون رویداد 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();
}
|
راجع این مطلب
سوال یا اشکالی دارید ؟! آن را در انجمن سایت مطرح نمایید ...
>>>>> ورود به انجمن تخصصی
نطر خودتان درباره این صفحه را با ما در میان گذاشته و در صورت تمایل از Developer1
حمایت نمایید :