PDA

View Full Version : تبدیل تاریخ شمسی به روز هفته



zohre gorji2
جمعه 04 آذر 1390, 22:03 عصر
با سلام به همگی
من یه گرید ویو دارم که میخام توش تقویم یک سال رو تعریف کنم مثلا سال 90
میخام وقتی تاریخو وارد کردم تو سلول بعدی روزش بشینه مثلا زدم 09/04 بشینه جمعه
لطفا راهنمایی کنید

ASKaffash
شنبه 05 آذر 1390, 09:00 صبح
سلام
با استفاده از کلاس PersianCalendar تاریخ شمسی را به میلادی تبدیل کنید سپس از خاصیت DayOfWeek شماره روز هفته را بدست آوردید و با یک تابع شماره را به نام هفته تبدیل کنید دقت شود روز شنبه 0 و یکشنبه 1 و ... می باشد

zohre gorji2
یک شنبه 06 آذر 1390, 00:12 صبح
ممنون از راهنمایی تون
من کدشو رو دوتا txtbox امتحان کردم جوابی که میخامو گرفتم مشکل اینجاست که بلد نیستم این کد رو چه جوری تو دیتاگرید ویو بنویسم!
چه جوری بهش بگم سلول (مربوط به روز هفته) وقتی تاریخ رو (وقتی تو سلول مربوط به تاریخ) وارد کردم برابر نتیجه بشه؟

zarrinnegar
یک شنبه 06 آذر 1390, 00:23 صبح
dataGridView1.CurrentRow.Cells["فیلد"].Value = "شنبه";

zohre gorji2
یک شنبه 06 آذر 1390, 20:14 عصر
من برای انجام تبدیلات تاریخ به سه تا متغیر سال و ماه و روز از جنس int احتیاج دارم. مثل کد زیر که مربوط به ساله


int year = Convert.ToInt32(dgv_taghvim .CurrentRow .Cells [1].Value .ToString ().Substring(0, 4));

اول اینکه نمیدونم تو کدوم رویداد گرید ویو کد رو بنویسم؟
دوم اینکه ( Substring(0, 4 درمورد maskedtextbox جواب میده که فرمت 0000/00/00 رو براش تعریف میکنم اما سلولای گرید ویو textbox هست ! نمیتونم این فرمتو براش ایجاد کنم!

محمد فدوی
یک شنبه 06 آذر 1390, 21:04 عصر
این تابع شاید مفید باشه:
private static DateTime ParseDate(string str)
{
int fSlash = str.IndexOf('/'),
sSlash = str.IndexOf('/', fSlash + 1);

return new DateTime(short.Parse(str.Substring(0, fSlash)),
short.Parse(str.Substring(fSlash + 1, sSlash - fSlash - 1)),
short.Parse(str.Substring(sSlash + 1, str.Length - sSlash - 1)));
}

محمد فدوی
یک شنبه 06 آذر 1390, 21:07 عصر
فقط یک نکته بگم در موقع استفاده از تابع فوق حتما از بلوک try...catch استفاده کنید. چون اگر کاربر اشتباهی چیزی وارد کنه یک استثنا (Exception) پرتاب میشه...

محمد فدوی
یک شنبه 06 آذر 1390, 21:10 عصر
یک چیز جالب بگم؟!
اصلا از تابع فوق استفاده نکنید!

string anyStr = "1390/2/4";
DateTime dt;
try
{
dt = DateTime.Parse(anyStr);
}
catch(Exception ex)
{
// Do Something
}

zohre gorji2
دوشنبه 07 آذر 1390, 07:29 صبح
تو کدوم رویداد گرید ویو کد رو بنویسم؟
تو cellmouseclick نوشتم اصلا جواب نداد . تو keypress جواب میده ولی فقط در مورد یک سطر!

Mahmoud Zaad
دوشنبه 07 آذر 1390, 08:29 صبح
سلام
می تونید از رویدادهای cellEndEdit یا cellLeave استفاده کنید که کاربر بعد از زدن Tab یا کلیدهای جهت، نتیجه رو ببینه.
از این کدها هم می تونید استفاده کنید
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
char[] charr = dataGridView1.CurrentRow.Cells[0].Value.ToString().ToCharArray();
string mah = charr[5].ToString() + charr[6].ToString();
string sal = charr[0].ToString() + charr[1].ToString() + charr[2].ToString() + charr[3].ToString();
string rooz = charr[8].ToString() + charr[9].ToString();
}

saeed_sho
دوشنبه 07 آذر 1390, 12:08 عصر
اگه بخوایم موقع لود شدن فرم تاریخ میلادی رو از هر سطر گریدویو بگیریم و به شمسی تبدیل کنیم و توی هر سطر جداگانه که تاریخش رو تبدیل کردیم بزاریمش سر جاش توی کدوم رویداد بنویسیم؟
cellendedit or cellformatting کدوم بهتره؟

www.DST.co.ir
جمعه 21 مهر 1391, 20:45 عصر
PersianCalendar p = new PersianCalendar();
DateTime dmiladi = new DateTime();
dmiladi = DateTime.Now;

switch (p.GetDayOfWeek(dmiladi).ToString().ToLower())
{
case "saturday": LbDay.Text = "شنبه";
break;
case "sunday": LbDay.Text = "یکشنبه";
break;
case "monday": LbDay.Text = "دوشنبه";
break;
case "tuesday": LbDay.Text = "سه شنبه";
break;
case "wednesday": LbDay.Text = "چهارشنبه";
break;
case "thursday": LbDay.Text = "پنجشنبه";
break;
case "friday": LbDay.Text = "جمعه";
break;
}
موفق باشید