تبدیل تاریخ میلادی به شمسی در دیتا گریدویو در #C
می خواهم توی پروژه خودم در ستونهای DataGrid View تاریخ رو که در دیتابیس به صورت میلادی ذخیره شده به صورت شمسی نمایش بدم. آیا کدهای زیر که نوشتم درسته ؟
System.Globalization.PersianCalendar pcl = new System.Globalization.PersianCalendar();
string shamsi_date = "";
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
int shamsi_year = Convert.ToInt32(pcl.GetYear(ds.Tables[0].Rows[i].Field<DateTime>("birthday")));
int shamsi_month = Convert.ToInt32(pcl.GetMonth(ds.Tables[0].Rows[i].Field<DateTime>("birthday")));
int shamsi_day = Convert.ToInt32(pcl.GetDayOfMonth(ds.Tables[0].Rows[i].Field<DateTime>("birthday")));
shamsi_date = shamsi_year.ToString() + "/" + shamsi_month.ToString() + "/" + shamsi_day.ToString();
ds.Tables[0].Rows[i].SetField<DateTime>("birthday", Convert.ToDateTime(shamsi_date));
}
پاسخ هوش مصنوعی
کد شما به طور کلی صحیح است، اما در تبدیل تاریخ شمسی به تاریخ میلادی مشکل وجود دارد. به جای اینکه تاریخ شمسی را به عنوان DateTime در دیتابیس ذخیره کنید، بهتر است تاریخ شمسی را به یک رشته (string) تبدیل کنید و سپس آن را در DataGridView نمایش دهید. در زیر کد اصلاح شده را مشاهده می کنید:
System.Globalization.PersianCalendar pcl = new System.Globalization.PersianCalendar();
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
DateTime gregorianDate = ds.Tables[0].Rows[i].Field<DateTime>("birthday");
int shamsi_year = pcl.GetYear(gregorianDate);
int shamsi_month = pcl.GetMonth(gregorianDate);
int shamsi_day = pcl.GetDayOfMonth(gregorianDate);
string shamsi_date = $"{shamsi_year}/{shamsi_month}/{shamsi_day}";
ds.Tables[0].Rows[i].SetField<string>("birthday", shamsi_date);
}
این کد تاریخ میلادی را به فرمت شمسی تبدیل می کند و آن را به صورت یک رشته (string) در ستون birthday ذخیره می کند. مطمین شوید که نوع داده ی ستون birthday در DataTable شما از string است، تا بتوانید تاریخ شمسی را به درستی ذخیره کنید.
نمایش تاریخ به صورت شمسی در دیتاگرید ویو در سی شارپ
روشی که شما استفاده کردید به نظر مناسب نیست. شما بهتره یک تابع بنویسید که عملیات تبدیل تاریخ میلادی به شمسی رو انجام بده و در حلقه for فقط از این تابع استفاده کنید. برای این منظور ابتدا یک کلاس ایجاد کنید که عملیات تبدیل تاریخ میلادی به شمسی رو انجام بده.
using MD.PersianDateTime;
using System;
public static class ConvertDateTime
{
public static string ConvertMiladiToShamsi(this DateTime? date, string format)
{
PersianDateTime persianDateTime = new PersianDateTime(date);
return persianDateTime.ToString(format);
}
}
خب حالا فقط کافیه به صورت زیر عمل کنید :
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
shamsi_date = ConvertDateTime.ConvertMiladiToShamsi(YourDate, "yyyy/MM/dd");
}
می بینید که خیلی مرتب تر و خلاصه تر شد.
لینک زیر رو هم مطالعه کنید.
- دسترسی به پکیج های nuget در زمان قطع نت بین الملل
- نمایش آخرین ردیف دیتاگیرید موقع لود در wpf
- مشکل اینترنت جهانی و عدم دسترسی به cdnjs.cloudflare.com
- مشکل در نصب sql server 2022
- جلوگیری از اد شدن خودکار در گروه و کانال تلگرام
- کم کردن حجم فیلم توسط کد در Asp net core
- چه کسانی استوری تلگرام را می بینند ؟
- برای کسب و کار تلگرام پرمیوم بهتره یا واتس اپ بیزینس ؟
- جلوگیری از انتشار غیرمجاز مطالب در کانال های تلگرامی
- تفاوت های تلگرام و واتس اپ چیست ؟
- مشکل تاریخ شمسی در سی شارپ
- نمایش گزارش stimulsoft روی کلاینت
- تفاوت های سی شارپ 8 با نسخه های قبلی چیه؟
- انتخاب چند سطر دلخواه توسط چک باکس در DataGrid و محاسبه جمع سطرهای انتخاب شده
- نمایش نوتیفکیشن در سی شارپ
- ارسال پارامتر از سی شارپ به استیمول سافت
- عدم نمایش عکس در دیتاگرید ویو در wpf
- Library Animation برای کنترلهای WPF
- مشکل در تغییر مقدار Text کنترل RibbonBar در کامپوننت DevExpress
- قرار دادن مقادیر ارسالی یک ستون از جدول به صورت سطری در استیمول