PDA

View Full Version : سوال: نمایش تاریخ شمسی در دیتاگرید



Arashdn
پنج شنبه 16 شهریور 1391, 16:11 عصر
سلام
دوستان من یه سری اطلاعات در دیتابیسم دارم که بصورت زیر در یه Datagrid اضافه کردمشون
OleDbDataAdapter da = new OleDbDataAdapter("Select * From sellinfo", my_cn);
DataSet ds = new DataSet();
DataTableMapping dtm = new DataTableMapping();
DataColumnMapping dcm = new DataColumnMapping();
dtm = da.TableMappings.Add("Table", "prc");

da.Fill(ds);
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "prc";
خیلی هم خوب کار میکنه
فقط سوالی که هست اینه که یکی از ستون های این جدول تاریخه و میخوام ببینم راهی هست که با کلاس persiancalender یا هر روش دیگه ای اینا رو به شمسی تبدیل کرد؟
ممنون

uniqueboy_ara
پنج شنبه 16 شهریور 1391, 16:57 عصر
من خودم این کار رو توسط خود SQL و یه تابع که توسط تکنولوژی CLR sql ایجاد شده، انجام میدم :)
آموزشش هم از توی همین سایت، برداشتم! یکی از دوستان ( اسمش یادم نیست ) یه PDF آموزشی خیلی عای توی یه پست قرار داده بودن!! متاسفانه الان هرچی گشتم فایل آموزشیش رو توی سیستمم پیدا نکردم، ولی اگه جستجو کنید، 99% پیداش می کنید :)

Arashdn
پنج شنبه 16 شهریور 1391, 17:38 عصر
من خودم این کار رو توسط خود SQL و یه تابع که توسط تکنولوژی CLR sql ایجاد شده، انجام میدم :)
آموزشش هم از توی همین سایت، برداشتم! یکی از دوستان ( اسمش یادم نیست ) یه PDF آموزشی خیلی عای توی یه پست قرار داده بودن!! متاسفانه الان هرچی گشتم فایل آموزشیش رو توی سیستمم پیدا نکردم، ولی اگه جستجو کنید، 99% پیداش می کنید :)
من از اکسس استفاده میکنم و نمیدونم این قابلیت در اکسس هست یا نه
نمیتونیم یه طوری بگیم که مثلا هر سطر که داره لود میشه اون وسط یه تابع persiancalender هم بیاد روش؟
دقیقا چی رو سرچ کنم تا اون پی دی افه پیدا بشه؟

uniqueboy_ara
پنج شنبه 16 شهریور 1391, 18:06 عصر
خودم بالاخره پیداش کردم :)

Arashdn
پنج شنبه 16 شهریور 1391, 18:23 عصر
سلام
فکر نمیکنم بشه چنین کار هایی رو با اکسس کرد
روش دیگه ای نداریم؟

Mahmoud Zaad
پنج شنبه 16 شهریور 1391, 18:58 عصر
سلام
اول یه متد برای تبدیل تاریخ می نویسید من این رو داشتم:



private string Miladi2Shamsi(DateTime _date)
{
PersianCalendar pc = new PersianCalendar();
StringBuilder sb = new StringBuilder();

sb.Append(pc.GetYear(_date).ToString(
"0000"));


sb.Append(
"/");

sb.Append(pc.GetMonth(_date).ToString("00"));


sb.Append("/");

sb.Append(pc.GetDayOfMonth(_date).ToString(
"00"));
return sb.ToString();
}


حالا، بعد از خط da.Fill(ds); کدهای زیر رو بنویسید:



foreach (DataRow dr in ds.Tables["tb1"].Rows)
{

dr[
"dte"] = Miladi2Shamsi(Convert.ToDateTime(dr["dte"])); ;

ds.Tables[
"tb1"].AcceptChanges();
}


توضیح اینکه اسم جدول من tb1 بود و اسم ستونی که تاریخ رو ذخیره کردم dte.
ولی یه سوالی بنیادین! چرا از اول به صورت شمسی ذخیره نمی کنید؟

Arashdn
پنج شنبه 16 شهریور 1391, 19:39 عصر
ایول
با این کلاس و روش مشکل حل شد...
ممنون


ولی یه سوالی بنیادین! چرا از اول به صورت شمسی ذخیره نمی کنید؟
اول اینکه تا اونجایی که من بلدم تاریخ شمسی بصورت استرینگ ذخیره میشه و نتونستم DateTime کنمش (که اگه یه بزرگواری لطف کنه و طریقه تبدیل یه استرینگ شمسی به DateTime میلادی رو بزاره شدیدا ممنونش میشیم)
چون خیلی جاها از برنامه لازمه ار تاریخ استفاده بشه و فعلا روشی برای تبدیل تاریخ شمسی به میلادی بلد نیستم(که اگه اینم یه نفر یاد بده خیلی لطف کرده)

Mahmoud Zaad
پنج شنبه 16 شهریور 1391, 20:03 عصر
خب اگه به Time اش نیاز ندارید همون استرینگ ذخیره کنید. توی مطلبی هم که نوشتم خبری از تبدیل Time نبود.

uniqueboy_ara
پنج شنبه 16 شهریور 1391, 20:06 عصر
از Access خبر ندارم ولی داخل SQL به دلیل اینکه رنج تاریخ تو متغییر DateTime از سال 1753 شروع میشه، امکان ذخیره تاریخ به صورت شمسی وجود نداشت
ولی با معرفی نوع جدید ( DateTime2 ) در SQL2008 از طرفمیکروسافت، این مشکل حل شد ، چون رنج این نوع داده جدید از 1/1/1 شروع میشه و به راحتی میشه تاریخ رو به صورت شمسی و به همون صورت DateTime ذخیره کرد