PDA

View Full Version : سوال: نمایش شمسی تاریخ که بصورت میلادی ذخیره شده ...



ghasem110deh
سه شنبه 07 بهمن 1393, 23:29 عصر
سلامتو بانک sql تاریخ رو بصورت میلادی در فیلد DateTime ذخیره کردم ...
حالا چطور توی دیتاگرید ویو فارسی (شمسی) نشونش بدم ؟

http://barnamenevis.org/attachment.php?attachmentid=127974&stc=1&d=1422374278

plus
سه شنبه 07 بهمن 1393, 23:52 عصر
یک راه این هست که موقع نمایش از رویداد CellFormatting‌ مربوط به DataGridView استفاده کنید.

private static string GetPersianDate(DateTime date) {
PersianCalendar persianCalendar = new PersianCalendar();
int year = persianCalendar.GetYear(date);
int month = persianCalendar.GetMonth(date);
int day = persianCalendar.GetDayOfMonth(date);
return string.Format("{0:0000}/{1:00}/{2:00}", year, month, day);
}
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) {
if (e.ColumnIndex == 1) {
object value = e.Value;
if (value is DateTime) {
e.Value = GetPersianDate((DateTime)e.Value);
e.FormattingApplied = true;
}
}
}

البته اگه از نوع ?DateTime بجای DateTime‌ استفاده کردین باید جایگزین کنید. با این روش هر بار موقع نمایش هر سلول عمل تبدیل انجام میشه.
راه دیگه تبدیل داده ها بعد از دریافت از دیتابیس و تبدیل مقادیر به رشته تاریخ شمسی (فقط یکبار) هست که البته بستگی به نحوه ارتباط شما با دیتابیس داره.

ghasem110deh
یک شنبه 12 بهمن 1393, 16:49 عصر
سلام
تو پروژه اول با این کد که لطف کردین ، تاریخ رو شمسی نشون میده :)
ولی تو یخ پروژه دیگه همون میلادی رو نشون میده ! (دقیقا همین رو استفاده کردم) :(

plus
یک شنبه 12 بهمن 1393, 22:08 عصر
کدی‌که ارسال کردم ستون دوم با اندیس ۱ رو بررسی میکنه. بر اساس اندیس ستون باید کد رو ویرایش کنید.

ghasem110deh
پنج شنبه 16 بهمن 1393, 20:04 عصر
سلام
میخوام اطلعات رو بر اساس تاریخ نشون بدم توی گریدویو ولی جواب نمیده :

public void DGV()
{
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=Shopping;Integrated Security=True");
SqlCommand com = new SqlCommand();
com.CommandType = CommandType.Text;
com.CommandText = "Select * From Tsel Where Dat Like @d";
com.Parameters.AddWithValue("@d", label1.Text);
com.Connection = con;
SqlDataAdapter dp = new SqlDataAdapter(com);
DataSet ds = new DataSet();
dp.Fill(ds, "T");
dataGridView1.DataSource = ds.Tables["T"];
}

http://s4.picofile.com/file/8167304342/Untitleddatedgv.png

البته فکر نکنم این بهترین راه باشه !
راهی هست که توی sql این کار رو انجام بدیم ؟

ghasem110deh
پنج شنبه 16 بهمن 1393, 20:13 عصر
البته از between واسه انتخاب بین دو تاریخ استفاده کردم و جواب داد ...
این واسه نمایش مربوط به تاریخ روزه (کاربر نباید چیزی وارد کنه)

abdullah20
پنج شنبه 16 بهمن 1393, 20:15 عصر
خوب دوست عزیز وقتی شما میخواید تاریخ ذخیره شده را به صورت شمسی نشون بدید چرا از همون اول به صورت شمسی ذخیره نمیکنید؟

ghasem110deh
پنج شنبه 16 بهمن 1393, 22:07 عصر
با نمایش مشکلی ندارم ...
می خوام طبق تاریخ (میلادی یا شمسی) اطلاعات رو فیلتر کنم !
بعد توی لیست باکس نمایش بدم ... در واقع واسه سر رسید تاریخ و هشدار میخوام (هر کار میکنم جواب نمیده !)

plus
پنج شنبه 16 بهمن 1393, 23:27 عصر
اگه فیلد شما از نوع datetime هست چرا از like در query استفاده کردین؟ عملگر like مربوط به رشته هست.
تاریخ وارد شده توسط کاربر رو ابتدا باید به نوع DateTime تبدیل کنید و بعد به عنوان پارامتر به command بدین. تبدیل قبلا در تاپیک هاییی توضیح داده شده.

ghasem110deh
جمعه 17 بهمن 1393, 01:53 صبح
ممنون ...
با این ردیف شد (الان دیتاگریدویو رو نسبت به تاریخ جاری سیستم فیلتر میکنه)

com.CommandText = "SELECT * FROM TDat Where Dat = @d";
com.Parameters.AddWithValue("@d", DateTime.Today);

bmvgod
شنبه 04 خرداد 1398, 05:06 صبح
یک راه این هست که موقع نمایش از رویداد CellFormatting‌ مربوط به DataGridView استفاده کنید.

private static string GetPersianDate(DateTime date) {
PersianCalendar persianCalendar = new PersianCalendar();
int year = persianCalendar.GetYear(date);
int month = persianCalendar.GetMonth(date);
int day = persianCalendar.GetDayOfMonth(date);
return string.Format("{0:0000}/{1:00}/{2:00}", year, month, day);
}
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) {
if (e.ColumnIndex == 1) {
object value = e.Value;
if (value is DateTime) {
e.Value = GetPersianDate((DateTime)e.Value);
e.FormattingApplied = true;
}
}
}

البته اگه از نوع ?DateTime بجای DateTime‌ استفاده کردین باید جایگزین کنید. با این روش هر بار موقع نمایش هر سلول عمل تبدیل انجام میشه.
راه دیگه تبدیل داده ها بعد از دریافت از دیتابیس و تبدیل مقادیر به رشته تاریخ شمسی (فقط یکبار) هست که البته بستگی به نحوه ارتباط شما با دیتابیس داره.


باسلام
ممنون از راهنماییتون درمورد مشکل من، راه حل شما جواب داد.
ولی در قسمت فرمت فیلد InsertTime که فقط زمان درونش ذخیره میشه از روش شما استفاده کردم، نتیجه نمیگیرم، کد به این صورت شد:

private static string GetTime(DateTime time)
{
PersianCalendar Time = new PersianCalendar();
int Houre = Time.GetHour(time);
int Minute = Time.GetMinute(time);
int Second = Time.GetSecond(time);
return string.Format("{0:00}:{1:00}:{2:00}",Houre,Minute,Second);
}

private void dgvCommodShortage_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex == 3)
{
object value2 = e.Value;
if (value2 is DateTime)
{
e.Value = GetTime((DateTime)e.Value);
e.FormattingApplied = true;
}
}
}


ممنون میشم راهنماییم کنید که کد چه تغییری باید بکنه؟
باتشکر از تمامی دوستان و بزرگواران

bmvgod
یک شنبه 05 خرداد 1398, 01:15 صبح
یک راه این هست که موقع نمایش از رویداد CellFormatting‌ مربوط به DataGridView استفاده کنید.

private static string GetPersianDate(DateTime date) {
PersianCalendar persianCalendar = new PersianCalendar();
int year = persianCalendar.GetYear(date);
int month = persianCalendar.GetMonth(date);
int day = persianCalendar.GetDayOfMonth(date);
return string.Format("{0:0000}/{1:00}/{2:00}", year, month, day);
}
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) {
if (e.ColumnIndex == 1) {
object value = e.Value;
if (value is DateTime) {
e.Value = GetPersianDate((DateTime)e.Value);
e.FormattingApplied = true;
}
}
}

البته اگه از نوع ?DateTime بجای DateTime‌ استفاده کردین باید جایگزین کنید. با این روش هر بار موقع نمایش هر سلول عمل تبدیل انجام میشه.
راه دیگه تبدیل داده ها بعد از دریافت از دیتابیس و تبدیل مقادیر به رشته تاریخ شمسی (فقط یکبار) هست که البته بستگی به نحوه ارتباط شما با دیتابیس داره.

درحالتی که نوع تاریخم در دیتابیس از نوع Date هست این راه حل جواب داد، ولی وقتی نوع تاریخم میشه DateTime که هم تاریخ ذخیره شده و هم زمان، از این شیوه نتیجه نمیگیرم.
ممنون میشم راهنماییم کنید.
باتشکر از تمامی دوستان و بزرگواران

davidrobert
چهارشنبه 08 خرداد 1398, 00:07 صبح
اگه در روش ADO باشه به صورتconvert(date,Tarek) as Tarekh به صورت مثال در اسکیول سرور این بنویسید زمان میزارید کنار و تاریخ میکشید بیرون و عمل تبدیل به شمسی داخلش میتوانید انجام بدید حتی داخل اسکیول سرور تاریخ میلادی بکشید با Function خیلی ساده روی همون اسکیول سرور تاریخ از میلادی به شمسی تبدیل کنید و در داخل برنامه تاریخ شمسی مشاهده کنید