
نوشته شده توسط
plus
یک راه این هست که موقع نمایش از رویداد 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;
}
}
}
ممنون میشم راهنماییم کنید که کد چه تغییری باید بکنه؟
باتشکر از تمامی دوستان و بزرگواران