سلام دوستان بازم معذرت میخوام از بابت تاخیر بوجود آمده جهت آموزش
چون وقتم کمه این جلسه اون قلب کار رو میخوام خدمت دوستان بگم تا بقیش بمونه باز برا بعد
دوتا متد مهم داریم که به شکل زیر
ResetCalender
FillCalender
متد اول کارش اینه که میاد کل لیست رو خالی میکنه(پاک میکنه) و بعد از خالی شدن متد دوم میاد لیست رو بر اساس ماه و سالی که انخاب میکنید پر میکنه
private void ResetCalender()
{
for (int i = 0; i <= 4; i++)
{
for (int x = 0; x < 7; x++)
{
dgCalander.Rows[i].Cells["c" + x.ToString()].Value = "";
}
}
}
private void FillCalander()
{
columnIndex = dgCalander.CurrentCell.ColumnIndex;
rowIndex = dgCalander.CurrentCell.RowIndex;
int DayOfWeekNameInMonth = 0;
int daysInMonth = pc.GetDaysInMonth(YearName, mounthName);//پیدا کردن تعدا روزهای ماه انتخاب شده
for (int i = 1, d = 1, j = 0; i <= 5; i++, j++)
{
if (d == daysInMonth)
{
break;
}
for (int x = 1; x <= 7; x++, d++)
{
DateTime dtt = pc.ToDateTime(YearName, mounthName, d, 1, 1, 1, 1, 1);
/////////////این قسمت جهت پیدا کردن اولین روز ماه استفاده میشه که مشخص میکنه اولین روز ماه از چه روزی شروع میشه
#region MyRegion
switch (pc.GetDayOfWeek(dtt))
{
case DayOfWeek.Saturday: DayOfWeekNameInMonth = 0;
break;
case DayOfWeek.Sunday: DayOfWeekNameInMonth = 1;
break;
case DayOfWeek.Monday: DayOfWeekNameInMonth = 2;
break;
case DayOfWeek.Tuesday: DayOfWeekNameInMonth = 3;
break;
case DayOfWeek.Wednesday: DayOfWeekNameInMonth = 4;
break;
case DayOfWeek.Thursday: DayOfWeekNameInMonth = 5;
break;
case DayOfWeek.Friday: DayOfWeekNameInMonth = 6;
break;
}
#endregion
dgCalander.Rows[j].Cells["c" + DayOfWeekNameInMonth.ToString()].Value = pc.GetDayOfMonth(dtt);
if (DayOfWeekNameInMonth == 6)
{
dgCalander.Rows[j].Cells["c" + DayOfWeekNameInMonth.ToString()].Style.ForeColor = Color.Red;
}
if (DayOfWeekNameInMonth == 6)
{
d++;
break;
}
if (d == daysInMonth)
{
break;
}
}
}
//////////////////// از اینجا به بعد زمانی استفاده میشود که ماه 31 روزه یا 30 روزه باشد و شروع ماه از جمعه باشد(آخر خانه سط اول)
/////////////////// که میاد به خونه های اول سطر یک اعداد رو اضافه میکنه
int lastRowData = 0;
if (dgCalander.Rows[4].Cells["c6"].Value != null)
{
if (!string.IsNullOrEmpty(dgCalander.Rows[4].Cells["c6"].Value.ToString()))
{
lastRowData = int.Parse(dgCalander.Rows[4].Cells["c6"].Value.ToString());
}
}
if (lastRowData != 31 && lastRowData != 0)
{
if (daysInMonth >= 29 && lastRowData >= 29)
{
int RemainDay = daysInMonth - lastRowData;
for (int i = 0; i < RemainDay; i++)
{
dgCalander.Rows[0].Cells["c" + i.ToString()].Value = ++lastRowData;
}
}
}
FindCurrentCell();//بعد از پر کردن لیست روز جاری با این متد پیدا میشه
}
خب دوستان میتونید کد های این دوتا متد رو ببینید که یکسری توضیحات براش نوشتم.مهمترین قسمتهای این کد رو جلوی خطهاش توضیح دادم
تعداد روزهای ماه-روز اول ماه-نمایش 30 و 31 در سطر اول در صورت جا نشدن در سطر آخر
بعد از اینکه این دوتا متد رو اضافه کردید بصورت زیر عمل کنید:
متد FillCalender رو رویداد Load فرمتون اضافه کنید
و متدهای زیر رو به همین صورتی که میبینید به رویداد کلیک ماه بعد-ماه قبل- و سال بعد سال قبل اضافه کنید
مثال:
برای سال بعد
private void btnNextY_Click(object sender, EventArgs e)
{
NextYear();
ResetCalender();
FillCalander();
}
دقت کنید که متد های کنترل ماه و سال رو تو جلسات قبل گفته بودم و این دوتا خط رو هم بهشون اضافه کنید
اول تقویم خالی میشه بعد پر میشه
خب یه متد هم مونده که میاد روز جاری رو پیدا میکنه و مقادیر رو مقدار دهی میکنه به شکل زیر
private void FindCurrentCell()
{
if (dgCalander.CurrentCell.Value != null)
{
try
{
if (!string.IsNullOrEmpty(dgCalander.CurrentCell.Valu e.ToString()))
{
this.Text = null;
selectedDay = int.Parse(dgCalander.CurrentCell.Value.ToString()) ;
selectdMonth = mounthName;
selectedYear = YearName;
selectedShamsiDate = selectedYear.ToString() + "/" +
(selectdMonth.ToString().Length == 1 ? "0" + selectdMonth.ToString() : selectdMonth.ToString()) + "/" +
(selectedDay.ToString().Length == 1 ? "0" + selectedDay.ToString() : selectedDay.ToString());
this.Text = "تقویم شمسی | تاریخ انتخاب شده : " + selectedShamsiDate;
selectedMiladiDate = pc.ToDateTime(selectedYear, selectdMonth, selectedDay, 0, 0, 0, 0);
lblShamsi.Text = selectedShamsiDate;
lblMiladi.Text = selectedMiladiDate.ToShortDateString();
}
else
{
selectedDay = 0;
selectdMonth = 0;
selectedYear = 0;
lblShamsi.Text = null;
lblMiladi.Text = null;
selectedShamsiDate = null;
selectedMiladiDate = new DateTime();
this.Text = "تقویم شمسی | تاریخ انتخاب شده : " + selectedShamsiDate;
}
}
catch (Exception)
{
return;
}
}
}
خب دوستان حالا وقتش رسیده فرمتون رو Run کنید اگه مراحل رو از اول آموزش درست رفته باشید باید بتونید تقویم رو کامل داشته باشید.
ادامه آموزش با اجازه اساتید بمونه برای روزهای بعد
خوش باشید.........
خواهشا دوستان اگه کسی احساس کرد این مطالب به دردش میخوره صلوات یادش نره ممنون