PDA

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



ostovarit
چهارشنبه 01 اردیبهشت 1389, 12:36 عصر
با سلام و خسته نباشید
یک گرید دارم که تاریخ رو به صورت میلادی نمایش میدهد
فیلدهای گرید رو به شکل زیر ایجاد کردم :



DataGridViewTextBoxColumn Date = new DataGridViewTextBoxColumn();
Date.DataPropertyName = "Date";
Date.HeaderText = "تــــاریخ";
Date.Width = 80;

و گرید رو با کد زیر بایند کردم :



da = new SqlDataAdapter("select * from RegStore", new myConnection().Cnn);
ds = new DataSet();
da.Fill(ds);
dataGridViewSpesific1.DataSource = ds.Tables[0];

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

راهنمایی، نمونه کد و پیشنهاد خود را بنویسید.

با تشکر

shervin_agh67
چهارشنبه 01 اردیبهشت 1389, 12:59 عصر
من این کار رو با دیتاست انجام ندادم و به نظرم هم کار سختیه. ولی با LINQ به راحتی قابل انجامه و چون در VS2008 دیتاست LINQ رو هم ساپورت می کنه بنابراین مشکلی نیست. اگه علاقه داشتی بگو تا کدشو بگذارم آخه الان رو سیستم VS نصب نیست.

ostovarit
چهارشنبه 01 اردیبهشت 1389, 13:09 عصر
من این کار رو با دیتاست انجام ندادم و به نظرم هم کار سختیه. ولی با LINQ به راحتی قابل انجامه و چون در VS2008 دیتاست LINQ رو هم ساپورت می کنه بنابراین مشکلی نیست. اگه علاقه داشتی بگو تا کدشو بگذارم آخه الان رو سیستم VS نصب نیست.


ممنون میشم اگر کد رو بزارید ...
اگر از LINQ استفاده کنم مشکلی در اجرا نرم افزار در سیستم عامل های مختلف نمیاد ...
همه سرویس پک های اکس پی LINQ رو ساپورت میکنن؟

shahab_ss
چهارشنبه 01 اردیبهشت 1389, 16:08 عصر
از CellFormatting در گرید هم میتونی استفاده کنی.
بهینه نیست اما راحت هست و کار شما رو راه میندازه !
موفق باشی

ostovarit
چهارشنبه 01 اردیبهشت 1389, 16:38 عصر
از CellFormatting در گرید هم میتونی استفاده کنی.
بهینه نیست اما راحت هست و کار شما رو راه میندازه !
موفق باشی

دقیقا متوجه نشدم که باید چکار کنم؟!
نمونه کدی در این رابطه دارید؟

shahab_ss
چهارشنبه 01 اردیبهشت 1389, 16:45 عصر
private void Datagrd_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex == col_Date.Index)
{
if (e.Value != null)
e.Value = Convert.ToShamsiDate(e.Value.ToString());
}

}

peymanjon
چهارشنبه 01 اردیبهشت 1389, 20:01 عصر
با استفاده از persianCalendar میتونی این کار را انجام بدی:
مثلا این کد از 3 تا textbox که یکی سال و ماه و روز را به شمسی میگیره یک obj برای save اون تو دیتا بیس به شمسی میسازه:

System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar();
DateTime dtF = pc.ToDateTime(Convert.ToInt32(txtinsertinfoyear.Te xt), Convert.ToInt32(txtinsertinfomonth.Text), Convert.ToInt32(txtinsertinfoday.Text), 0, 0, 0, 0);و این تابع هم تاریخ امروز را به شمسی نشون میده :

PersianCalendar objt = new PersianCalendar();
label.Text = (objt.GetYear(DateTime.Today) + "/" + objt.GetMonth(DateTime.Today) + "/" + objt.GetDayOfMonth(DateTime.Today)).ToString();ک ر با این تابع زیاد میشه کرد و مشکل شما رو هم برای convert از میلادی به شمسی انجام میدهد.

ostovarit
چهارشنبه 01 اردیبهشت 1389, 23:02 عصر
با استفاده از persianCalendar میتونی این کار را انجام بدی:
مثلا این کد از 3 تا textbox که یکی سال و ماه و روز را به شمسی میگیره یک obj برای save اون تو دیتا بیس به شمسی میسازه:

System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar();
DateTime dtF = pc.ToDateTime(Convert.ToInt32(txtinsertinfoyear.Te xt), Convert.ToInt32(txtinsertinfomonth.Text), Convert.ToInt32(txtinsertinfoday.Text), 0, 0, 0, 0);و این تابع هم تاریخ امروز را به شمسی نشون میده :

PersianCalendar objt = new PersianCalendar();
label.Text = (objt.GetYear(DateTime.Today) + "/" + objt.GetMonth(DateTime.Today) + "/" + objt.GetDayOfMonth(DateTime.Today)).ToString();ک ر با این تابع زیاد میشه کرد و مشکل شما رو هم برای convert از میلادی به شمسی انجام میدهد.

ممنونم... راهنمایی خوبی بود ...
فقط یک سوال داشتم تاریخ رو تو دیتابیس به میلادی ذخیره کنم یا شمسی ؟
اگر شمسی ذخیره کنم بعدا که میخوام مثلا فاصله دو تاریخ رو محاسبه کنم و یا از توابع یا ... استفاده کنم به مشکلی بر نمیخورم؟

shervin_agh67
پنج شنبه 02 اردیبهشت 1389, 00:10 صبح
تاریخ رو اگر بعدا قراره پردازش های مختلفی روش انجام بدی باید میلادی ذخیره کنی و در برنامه به شمسی تبدیل کنی. چون SQLServer تاریخ شمسی ذخیره نمی کنه و شما مجبورید نوعش رو nvarchar تعریف کنید که اونوقت کار روی مقادیرش یک کمی سخت میشه.
شرمنده من سیستمم مشکل داره نمی تونم کد برنامه رو با LINQ برات بفرستم . از دوستان کسی می تونه یک برنامه نمونه برای ایشون بذاره ؟ اگه نبود بگو تا دستی یک چیزایی می نویسم .

ostovarit
پنج شنبه 02 اردیبهشت 1389, 08:58 صبح
تاریخ رو اگر بعدا قراره پردازش های مختلفی روش انجام بدی باید میلادی ذخیره کنی و در برنامه به شمسی تبدیل کنی. چون SQLServer تاریخ شمسی ذخیره نمی کنه و شما مجبورید نوعش رو nvarchar تعریف کنید که اونوقت کار روی مقادیرش یک کمی سخت میشه.
شرمنده من سیستمم مشکل داره نمی تونم کد برنامه رو با LINQ برات بفرستم . از دوستان کسی می تونه یک برنامه نمونه برای ایشون بذاره ؟ اگه نبود بگو تا دستی یک چیزایی می نویسم .

ممنون از راهنماییت ....
مشکلم تا یک حد زیادی حل شده ... باز اگر مسئله ای بر خوردم مطرح میکنم ...

با تشکر از همه دوستان