PDA

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



vahidth
یک شنبه 10 دی 1391, 11:29 صبح
سلام
دوستان چطوری میتونم فیلد تاریخ در دیتاگرید رو به صورت فارسی نشون بدم؟

morteza5358
یک شنبه 10 دی 1391, 11:32 صبح
سلام
از کلاس PersianCalendar استفاده کنید!

rezayeman
یک شنبه 10 دی 1391, 11:38 صبح
اول این تابع رو در کلاس اضافه کن

/// <summary>
///
/// </summary>
/// <param name="md">تاریخ میلادی</param>
/// <returns>تاریخ شمسی</returns>
public static string Shamsi_Date(DateTime md)
{
PersianCalendar PersiaC = new PersianCalendar();

try
{
string day = "", Month = "";

day = (PersiaC.GetDayOfMonth(md) < 10) ? "0" + PersiaC.GetDayOfMonth(md).ToString() : PersiaC.GetDayOfMonth(md).ToString();

Month = (PersiaC.GetMonth(md) < 10) ? "0" + PersiaC.GetMonth(md).ToString() : PersiaC.GetMonth(md).ToString();

return PersiaC.GetYear(md).ToString() + "/" + Month.ToString() + "/" +
day.ToString();
}
catch (Exception ex)
{
FMessageBox.Show(ex.Message, "پیغام خطا", FMessageBoxButtons.OK, FMessageBoxIcons.Error);
return "";
}
}


بعد در رویداد CellFormatting مربوط به دیتا گرید کد زیر را بنویس

private void DatagvMain_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{

if (e.Value != null)
{
if (DatagvMain.Columns[e.ColumnIndex].Name == "DateSend")
{
try
{
e.Value = Date.Shamsi_Date(Convert.ToDateTime(e.Value));
}
catch { }
}
if (DatagvMain.Columns[e.ColumnIndex].Name == "DateRecord")
{
try
{
e.Value = Date.Shamsi_Date(Convert.ToDateTime(e.Value));
}
catch { }
}
}
}

samira3
یک شنبه 10 دی 1391, 11:59 صبح
سلام
فونت گريد فارسي كنيد .

vahidth
دوشنبه 11 دی 1391, 16:34 عصر
داداش من یه کلاس ساختم ولی ارور میده
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace project_sapt
{
public static string Shamsi_Date(DateTime md)
{
PersianCalendar PersiaC = new PersianCalendar();

try
{
string day = "", Month = "";

day = (PersiaC.GetDayOfMonth(md) < 10) ? "0" + PersiaC.GetDayOfMonth(md).ToString() : PersiaC.GetDayOfMonth(md).ToString();

Month = (PersiaC.GetMonth(md) < 10) ? "0" + PersiaC.GetMonth(md).ToString() : PersiaC.GetMonth(md).ToString();

return PersiaC.GetYear(md).ToString() + "/" + Month.ToString() + "/" +
day.ToString();
}
catch (Exception ex)
{
FMessageBox.Show(ex.Message, "پیغام خطا", FMessageBoxButtons.OK, FMessageBoxIcons.Error);
return "";
}
}



97604

سعید کشاورز
دوشنبه 11 دی 1391, 16:51 عصر
فکر کنم اگه فونت فیلد تاریخ رو فارسی کنی اوکی بشه

Alireza.imani
دوشنبه 11 دی 1391, 16:51 عصر
فونت اون تکسن باکسی که به جدول دیتابیس اطلاعات ارسال می کنه رو ، فونتی قرار دهید که اعداد فارسی باشه.

vahidth
دوشنبه 11 دی 1391, 16:54 عصر
من میخوام با استفاده از کد این کارو انجام بدم!

morteza5358
دوشنبه 11 دی 1391, 16:55 عصر
سلام
اول از همه:
using System.Globalization;
بعد:
DateTime md = new DateTime();
PersianCalendar PersiaC = new PersianCalendar();
بعد از اون:
md = DateTime.Now;
string day = "", Month = "",Year = "";
MessageBox.Show(PersiaC.GetYear(md).ToString() + "/" + PersiaC.GetMonth(md).ToString()+"/"+PersiaC.GetDayOfMonth(md).ToString(), "تاریخ");
کد های بالا تاریخ سیستم رو به صورت شمسی نمایش میده....

morteza5358
دوشنبه 11 دی 1391, 17:00 عصر
این هم یه پروژه برای نمایش تاریخ به صورت شمسی:

اگه مفید بود تشکر فراموش نشود.

vahidth
دوشنبه 11 دی 1391, 17:42 عصر
ممنون داداش ولی فارسی نشد

morteza5358
دوشنبه 11 دی 1391, 17:47 عصر
:متعجب:
مگه اینو نشون نمیده؟؟؟؟؟؟
1391/10/11

منظورت از فارسی چیه؟؟؟؟

vahidth
دوشنبه 11 دی 1391, 18:05 عصر
داداش میخوام اینجوری نمایش بده البته در دیتاگرید
97607

morteza5358
دوشنبه 11 دی 1391, 18:08 عصر
اون دیگه مربوط میشه به فونت دیتا گرید.
فونتشو بکن Tahoma درست میشه!

vahidth
دوشنبه 11 دی 1391, 18:20 عصر
داداش اگه توجه کنی اصلا تو properties دیتاگرید گزینه ای بنام font وجود ندارد!...
به هر حال ممنون ازت داداش

moharam1370
دوشنبه 11 دی 1391, 19:35 عصر
سلام
ببین با این مشکلت حل میشه ؟

plus
دوشنبه 11 دی 1391, 19:54 عصر
شما میتونی بعد از اینکه تاریخ رو به صورت شمسی در آوردی (با هر روشی) توی رویداد CellFormatting، کاراکترهای عددی انگلیسی رو با فارسی جایگزین کنی:


private string NumbersToFarsi(string s)
{
char[] output = new char[s.Length];
for (int i = 0; i < s.Length; i++)
{
if (char.IsDigit(s[i]))
{
output[i] = (char)(0x06F0 + (int)s[i] - (int)'0');
}
else
{
output[i] = s[i];
}
}
return new string(output);
}

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex == /* Specified Column Index */)
{
if (e.Value is string)
{
e.Value = NumbersToFarsi((string)e.Value);
e.FormattingApplied = true;
}
}
}

salehsam
سه شنبه 12 آذر 1392, 20:28 عصر
من از رویداد cellformatting استفاده کردم ولی خیلی cpu رو درگیر میکنه!
چیکار کنم؟

plus
سه شنبه 12 آذر 1392, 20:58 عصر
من از رویداد cellformatting استفاده کردم ولی خیلی cpu رو درگیر میکنه!
چیکار کنم؟
کدی که در CellFormatting میگذارید رو باید با دقت و به بهترین نحو بنویسید تا کمترین زمان اجرا رو داشته باشه.برای تبدیل حروف به فارسی اگه طول متن ها زیاد نباشه و به صورت موثر نوشته بشه نباید مشکل خاصی به وجود بیاره ولی به هر حال راه دوم این هست که اطلاعات رو ابتدا فرمت کنید و بعد برای نمایش به Grid بدین...

salehsam
سه شنبه 12 آذر 1392, 21:03 عصر
من از این کد استفاده می کنم


var date = new dtc();
if (this.dgv_dore.Columns[e.ColumnIndex].Name == "dore_startdate") //PersianDate == Your Date Column Name
{
if (e.Value != null)
{
e.Value = Convert.ToString(date.miladitoshamsi(Convert.ToDat eTime((e.Value))));

}
}

چیکار کنم که فقط یک بار تغییر بده؟
من با EF اطلاعات رو ثبت و نمایش میدم چجوری اول فرمت کنم بعد گرید کنم؟

rezayeman
پنج شنبه 14 آذر 1392, 14:09 عصر
داداش اگه توجه کنی اصلا تو properties دیتاگرید گزینه ای بنام font وجود ندارد!...
به هر حال ممنون ازت داداش

سلام. اگه فونت فرم tahoma باشه بعد دیتا گرید به فرم اضافه کنی به طور خودکار فونت دیتاگرید هم tahoma میشه اگه بخوای فقط فونت دیتا گریدو عوض کنی باید تو تنظیمات ستون یا سطر اینکارو انجام بدی وگرنه خود دیتاگرید خاصیت فونت نداره. راجب کد cellformatting هم کدی که گداشتم کاملا درسته و به درستی کار میکنه اما اینکه cpu رو خیلی مشغول میکنه حق با دوستمونه باید کدهارو خیلی خوب بنویسی. یه روش دیگه هم هست که از خود sql تاریخ فارسی میشه و بعد نمایش میده اگه خواستین آموزششو براتون میزارم. البته این آموزشو با جستجو تو همین سایت پیدا میکنید اگه پیدا نشد بهم اطلاع بدین

plus
پنج شنبه 14 آذر 1392, 19:42 عصر
من از این کد استفاده می کنم


var date = new dtc();
if (this.dgv_dore.Columns[e.ColumnIndex].Name == "dore_startdate") //PersianDate == Your Date Column Name
{
if (e.Value != null)
{
e.Value = Convert.ToString(date.miladitoshamsi(Convert.ToDat eTime((e.Value))));

}
}

چیکار کنم که فقط یک بار تغییر بده؟
من با EF اطلاعات رو ثبت و نمایش میدم چجوری اول فرمت کنم بعد گرید کنم؟

زیاد با EF کار نکردم ولی فکر میکنم شما میتونی اول یک متد که کارش تبدیل تاریخ هست رو بنویسی و کدهایی که گذشتی رو داخلش قرار بدی و بعد توی select مربوط به LINQ اون متد رو فراخوانی کنی.چیزی شبیه به این:

var result = from record in db.Table1
select new {...... , Date = Convert(record.Date)};

private string Convert(string value)
{
// Convert value
return value;
}