تبدیل تاریخ میلادی به شمسی در دیتا گریدویو در #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");
}
می بینید که خیلی مرتب تر و خلاصه تر شد.
لینک زیر رو هم مطالعه کنید.
- خطا موقع استفاده از Api در سی شارپ
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- مشکل تاریخ شمسی در سی شارپ
- نمایش گزارش stimulsoft روی کلاینت
- تفاوت های سی شارپ 8 با نسخه های قبلی چیه؟
- انتخاب چند سطر دلخواه توسط چک باکس در DataGrid و محاسبه جمع سطرهای انتخاب شده
- نمایش نوتیفکیشن در سی شارپ
- ارسال پارامتر از سی شارپ به استیمول سافت
- عدم نمایش عکس در دیتاگرید ویو در wpf
- Library Animation برای کنترلهای WPF
- مشکل در تغییر مقدار Text کنترل RibbonBar در کامپوننت DevExpress
- قرار دادن مقادیر ارسالی یک ستون از جدول به صورت سطری در استیمول