سلام
اولا که بنده اولین باره تایپیک ارسال می کنم و یه مقدار هم دنبال اینکه چجوری باید ارسال کنم گشتم! بنابراین بنده را به تایپیک های دیگه راهنمایی نفرمایین خواهشا
مشکل بنده اینه:!
یه مثلا به اصطلاح برنامه نوشتم و تو دیتابیسش که sql هست چندتا جدول داره که دارای فیلد تاریخ هستند که تاریخها بصورت میلادی ذخیره میشوند.
روال برنامه هم اینه که تاریخها را از تکست باکس به صورت شمسی از کاربر می گیره و سپس با استفاده از system.globalization.persiancalender به میلادی تبدیل می کنه و در پایگاه داده ذخیره می کنه.
الحمدلله فعلا مشکلی تو این زمینه نیست.
مشکل زمانی هست که می خوام همین تاریخها را در دیتاگریدویو به کاربر نمایش بدهم یعنی تاریخی که به صورت میلادی در پایگاه ذخیره شده را خونده و به شمسی تغییر داده و در یکی از سلولهای دیتاگریدویو نشون بده.
این کار انجام میشه ولی وقتی میخاد تبدیل تاریخ از میلادی به شمسی انجام بشه در روزهای 30و31 اردیبهشت و روز 31 تیر و شهریور همه سالها مشکل پیدا می کنه. لطفا راهنمایی کنید. تو بقیه سایتها جستجو کردم یکی گفته بود سال و ماه و روز را جدا ذخیره کن. یکی گفته بود شمسی ذخیره کن. یکی گفته بود بهترین کار اینه که مثلا بصورت 940231 و از نوع integer ذخیره کنی در پایگاه داده (که بسیاری از شرکتهای بزرگ برنامه نویسی از همین روش استفاده می کنند و تمام تاریخها را از نوع integer تعریف می کنند و در پایگاه ذخیره می کنند!).
خلاصه بنده فعلا وقت و بخصوص سواااااات لازم برا تغییر تاریخ بصورتهای گفته شده را ندارم لطفا یکی بگه همین مشکل فعلی را برا همین 4 روز چطور حل کنم. ممنون
کلاس و توابع تبادیل! تاریخ اینجوریه:
class shamsi_miladi
{
public static DateTime shamsiTOmiladi(string Tarikh)
{
int Rooz = int.Parse(Tarikh.Substring(8, 2));
int Maah = int.Parse(Tarikh.Substring(5, 2));
int Saal = int.Parse(Tarikh.Substring(0, 4));
System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar();
DateTime stm = new DateTime();
stm = pc.ToDateTime(Saal, Maah, Rooz, 0, 0, 0, 0);
return stm;
}
public static string miladiTOshamsi(DateTime tarikh)
{
System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar();
string mts;
// mts=pc.GetYear(tarikh).ToString() + "/" + pc.GetMonth(tarikh).ToString() + "/" + pc.GetDayOfMonth(tarikh).ToString();
mts = string.Format("{0}/{1}/{2}", pc.GetYear(tarikh), pc.GetMonth(tarikh), pc.GetDayOfMonth(tarikh));
return mts;
}
}
و تابع تبدیل سطر به سطر، سلول حاوی تاریخ از میلادی به شمسی اینجوریه:
void showDGV_Aza(string select)
{
DataTable dt_Aza = new DataTable();
dt_Aza = Database.Query_select(select);
DGV_Aza.DataSource = dt_Aza;
for (int i = 0; i < DGV_Aza.RowCount; i++)
{
DGV_Aza.Rows[i].Cells["tarikhe_exp_AzaDGV_txtcolumn"].Value =
DateTime.Parse(shamsi_miladi.miladiTOshamsi(DateTi me.Parse(DGV_Aza.Rows[i].Cells["tarikhe_exp_AzaDGV_txtcolumn"].Value.ToString()))).ToShortDateString();
}
DGV_Aza.Show();
}
تابع database.query_select(select رکوردهای ذخیره شده را میخونه و در دیتاتیبل dt_Aza قرار میده. بعد تو یک حلقه for تاریخ میلادی خونده شده از پایگاه داده را بواسطه دستور سطر زیرش خونده و به شمسی تبدیل می کنه و در دیتاتیبل بجای تاریخ میلادی درج می کنه و در آخر دیتاتیبل در دیتاگریدویو نمایش داده میشه.
دقیقا در روزهای نامبرده شده عبارت
DateTime.Parse(DGV_Aza.Rows[i].Cells["tarikhe_exp_AzaDGV_txtcolumn"].Value.ToString())
را خطا میگیره و با این عنوان when converting a string to datetime, parse the string to take a date befor putting each variable into the datetime object---make sure your method arguments are in the right format
ببخشید اینقدر توضیح دادم ولی گفتم توضیح واضحات داده باشم!!!