سلام
دوستان چطوری میتونم فیلد تاریخ در دیتاگرید رو به صورت فارسی نشون بدم؟
سلام
دوستان چطوری میتونم فیلد تاریخ در دیتاگرید رو به صورت فارسی نشون بدم؟
سلام
از کلاس PersianCalendar استفاده کنید!
اول این تابع رو در کلاس اضافه کن
/// <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 { }
}
}
}
سلام
فونت گريد فارسي كنيد .
داداش من یه کلاس ساختم ولی ارور میده
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 "";
}
}
10.jpg
فکر کنم اگه فونت فیلد تاریخ رو فارسی کنی اوکی بشه
فونت اون تکسن باکسی که به جدول دیتابیس اطلاعات ارسال می کنه رو ، فونتی قرار دهید که اعداد فارسی باشه.
من میخوام با استفاده از کد این کارو انجام بدم!
سلام
اول از همه:
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(), "تاریخ");
کد های بالا تاریخ سیستم رو به صورت شمسی نمایش میده....
این هم یه پروژه برای نمایش تاریخ به صورت شمسی:
اگه مفید بود تشکر فراموش نشود.
ممنون داداش ولی فارسی نشد
مگه اینو نشون نمیده؟؟؟؟؟؟
1391/10/11
منظورت از فارسی چیه؟؟؟؟
داداش میخوام اینجوری نمایش بده البته در دیتاگرید
111.jpg
اون دیگه مربوط میشه به فونت دیتا گرید.
فونتشو بکن Tahoma درست میشه!
داداش اگه توجه کنی اصلا تو properties دیتاگرید گزینه ای بنام font وجود ندارد!...
به هر حال ممنون ازت داداش
سلام
ببین با این مشکلت حل میشه ؟
شما میتونی بعد از اینکه تاریخ رو به صورت شمسی در آوردی (با هر روشی) توی رویداد 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;
}
}
}
من از رویداد cellformatting استفاده کردم ولی خیلی cpu رو درگیر میکنه!
چیکار کنم؟
کدی که در CellFormatting میگذارید رو باید با دقت و به بهترین نحو بنویسید تا کمترین زمان اجرا رو داشته باشه.برای تبدیل حروف به فارسی اگه طول متن ها زیاد نباشه و به صورت موثر نوشته بشه نباید مشکل خاصی به وجود بیاره ولی به هر حال راه دوم این هست که اطلاعات رو ابتدا فرمت کنید و بعد برای نمایش به Grid بدین...
من از این کد استفاده می کنم
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 اطلاعات رو ثبت و نمایش میدم چجوری اول فرمت کنم بعد گرید کنم؟
سلام. اگه فونت فرم tahoma باشه بعد دیتا گرید به فرم اضافه کنی به طور خودکار فونت دیتاگرید هم tahoma میشه اگه بخوای فقط فونت دیتا گریدو عوض کنی باید تو تنظیمات ستون یا سطر اینکارو انجام بدی وگرنه خود دیتاگرید خاصیت فونت نداره. راجب کد cellformatting هم کدی که گداشتم کاملا درسته و به درستی کار میکنه اما اینکه cpu رو خیلی مشغول میکنه حق با دوستمونه باید کدهارو خیلی خوب بنویسی. یه روش دیگه هم هست که از خود sql تاریخ فارسی میشه و بعد نمایش میده اگه خواستین آموزششو براتون میزارم. البته این آموزشو با جستجو تو همین سایت پیدا میکنید اگه پیدا نشد بهم اطلاع بدین
زیاد با 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;
}