PDA

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



ahmad1010
شنبه 04 بهمن 1399, 12:25 عصر
سلام دوستان- راهی برای نمایش اعداد فارسی در دیتاگرید هست؟ با تنظیم فونت فارسی درست نشد. ممنون از همه

the king
شنبه 04 بهمن 1399, 12:57 عصر
سلام دوستان- راهی برای نمایش اعداد فارسی در دیتاگرید هست؟ با تنظیم فونت فارسی درست نشد. ممنون از همه


private static StringFormat GetPersianDigitStringFormat()
{
var format = new StringFormat(StringFormat.GenericDefault);
format.SetDigitSubstitution(1065, StringDigitSubstitute.National);
return format;
}

private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if ((e.RowIndex >= 0) && (e.ColumnIndex == 0))
{
e.Handled = true;
e.Paint(e.ClipBounds, e.PaintParts & (DataGridViewPaintParts.All ^ DataGridViewPaintParts.ContentForeground));
var format = GetPersianDigitStringFormat();
var selected = (e.State & DataGridViewElementStates.Selected) == DataGridViewElementStates.Selected;
using (var brush = new SolidBrush(selected ? e.CellStyle.SelectionForeColor : e.CellStyle.ForeColor))
{
e.Graphics.DrawString(e.FormattedValue.ToString(), e.CellStyle.Font, brush, e.CellBounds, format);
}
}
}

ahmad1010
دوشنبه 06 بهمن 1399, 09:26 صبح
سلام و تشکر- این کد هم جواب نداد.

رامین مرادی
دوشنبه 06 بهمن 1399, 19:29 عصر
private static StringFormat GetPersianDigitStringFormat()
{
var format = new StringFormat(StringFormat.GenericDefault);
format.SetDigitSubstitution(1065, StringDigitSubstitute.National);
return format;
}

private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if ((e.RowIndex >= 0) && (e.ColumnIndex == 0))
{
e.Handled = true;
e.Paint(e.ClipBounds, e.PaintParts & (DataGridViewPaintParts.All ^ DataGridViewPaintParts.ContentForeground));
var format = GetPersianDigitStringFormat();
var selected = (e.State & DataGridViewElementStates.Selected) == DataGridViewElementStates.Selected;
using (var brush = new SolidBrush(selected ? e.CellStyle.SelectionForeColor : e.CellStyle.ForeColor))
{
e.Graphics.DrawString(e.FormattedValue.ToString(), e.CellStyle.Font, brush, e.CellBounds, format);
}
}
}

فونتتون رو رو حالت arabic میزارید؟

the king
دوشنبه 06 بهمن 1399, 20:55 عصر
فونتتون رو رو حالت arabic میزارید؟
نه، چون Script فونت این وسط بی تاثیر ئه، چه Western و چه Arabic و چه Turkish یا Baltic صرفا Character Set فونت تغییر می کنه که تاثیرش فقط و فقط روی متن های ASCII (سیستم های non-Unicode) است و در ظاهر رشته های Unicode که در محیط NET. و نرم افزار های مدرن ویندوز استفاده میشه تاثیری نداره.
انتخاب رقم بر اساس اون LCID ئه 1065 انجام میشه که با SetDigitSubstitution اعمال میشه، مستقل از اینکه در Font چه مقدار Font.GdiCharSet ای ثبت شده.
حتی اگر از فونت ای مثل Impact استفاده بشه که اون Unicode Range و ارقام فارسی عربی رو نداره، با استفاده از فونت پیشفرض سیستم که اون ارقام فارسی رو داره جایگزینی Glyph صورت می گیره.

mehran6764
دوشنبه 06 بهمن 1399, 21:21 عصر
از فونت IRANYekan(FaNum) برای دیتاگرید استفاده کنید 100% اعداد رو فارسی نشون میده

رامین مرادی
سه شنبه 07 بهمن 1399, 08:40 صبح
سلام دوستان- راهی برای نمایش اعداد فارسی در دیتاگرید هست؟ با تنظیم فونت فارسی درست نشد. ممنون از همه

من از فونت vazir fd استفاده میکنم تا حالا مشکلی نداشتم باهاش. یکان هم خوبه

ahmad1010
چهارشنبه 08 بهمن 1399, 08:20 صبح
از اینجا فونت رو Arabic انتخاب کردم DataGridViewCellStyle ولی فارسی نشد. فونت هایی که دوستان دیگر فرمودند ارور میده
truetype

mehran6764
چهارشنبه 08 بهمن 1399, 09:00 صبح
از اینجا فونت رو Arabic انتخاب کردم DataGridViewCellStyle ولی فارسی نشد. فونت هایی که دوستان دیگر فرمودند ارور میده
truetype

فونت رو اول نصب کنید بعدش سیستم رو یکبار ریستتارت کنید
تا شناخته بشه

ahmad1010
چهارشنبه 08 بهمن 1399, 10:05 صبح
فونت شناخته شد ولی همچنان اعداد لاتین نمایش داده می شوند.

رامین مرادی
چهارشنبه 08 بهمن 1399, 10:40 صبح
فونت شناخته شد ولی همچنان اعداد لاتین نمایش داده می شوند.
یکبار حالت کانتکس رو از تنطیمات زبان ویندوز بررسی کنید احتمال زیاد درست بشه.

ahmad1010
چهارشنبه 08 بهمن 1399, 11:15 صبح
ممنون درست شد. مشکل از تنظیمات ویندوز بود. خیلی لطف کردی.