PDA

View Full Version : سوال: قرار دادن / بجای . در فیلدهای اعشاری



Cadivar
پنج شنبه 21 آذر 1392, 18:20 عصر
سلام
مشکل من این که می خوام داده های اعشاری نمایشی در دیتاگرید بجای . بعنوان اعشار از کاراکتر / استفاده کنه من روشهای مختلف رو تست کردم اما متاسفانه موفق نشدم مشکل اینجاست که نوع داده ستون دیتاگرید از نوع Single می باشد و نوع داده رشته ای را قبول نمی کند!
بانک اطلاعاتی مورد استفاده Access و تعداد رکوردها بسیار زیاد می باشد بهمین دلیل استفاده از رویدادهایی مانند CellFormatting شدیدا روی سرعت اجرای برنامه تاثیر می گذارد.

مهرداد صفا
جمعه 22 آذر 1392, 16:25 عصر
با سلام.
گزینه System.Threating.Thread.CurrentThread.CurrentUICul ture را به یک نمونه از CultureInfo به زبان فارسی تغییر دهید:


//بسم الله الرحمن الرحیم
//اللهم صل علی محمد و آل محمد

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;
using System.Threading;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
decimal x = 1.5m;
Console.WriteLine(x);
Thread.CurrentThread.CurrentCulture = new CultureInfo("fa");
Console.WriteLine(x);
Console.ReadKey();
}
}
}

نتیجه:


1.5
1/5

Cadivar
جمعه 22 آذر 1392, 18:40 عصر
با سلام و عرض خسته نباشید
متاسفانه در محیط ویژوال کد شما جواب نمی دهد یا احتمالا ناقص می باشد ، اگه براتون مقدور راهنمایی بیشتری بکنید

مهرداد صفا
شنبه 23 آذر 1392, 11:52 صبح
سلام.
کجا و به چه صورت استفاده کردید؟ کد و یا متن خطا لطفا؟

Cadivar
شنبه 23 آذر 1392, 19:05 عصر
سلام و تشکر از پیگیری شما،
راستش داده های موجود در دیتابیس عددی هستند که در دیتاگرید بصورت عددی نمایش داده می شوند و کاراکتر جدا کننده عدد و اعشار . است .
روش پیشنهادی شما را برای یک مقدار دهی به lable انجام دادم که متاسفانه انجام نشد

float f=1.25f
Thread.CurrentThread.CurrentUICulture = new CultureInfo("Fa-IR");
label1.Text = f.ToString()

Cadivar
شنبه 23 آذر 1392, 19:09 عصر
ضمنا" کدهای بالا در رویداد button_click نوشته شد و خروجی بدون پیغام خطا می باشد و در لیبل متن 1.25 مجددا نمایش داده می شود

fmehrvarzi
دوشنبه 25 آذر 1392, 22:06 عصر
سلام جناب استاد گرامی
با همون روش جناب مهراد صفا:
روی سیستمی که زبان دیفالتش فارسی باشه امتحان کردین
رو سیستمی که (ساعت و تاریخ و روز را به عربی نشان بده)

Cadivar
دوشنبه 25 آذر 1392, 22:22 عصر
با سلام و تشکر از راهنمایتون
اگه اشتباه نکنم منظورتون اینکه خصوصیت Decimal Symbol ویندوز را از . به / تغییر دهم با انجام اینکار لیبل متن را بصورت مورد نظر یعنی 1/25 نمایش می دهد اما دو اشکال وجود دارد:
1- این کد باعث تغییر در تنظیمات ویندوز یوسر می شود در حالیکه من می خوام فقط در برنامه یه چنین قابلیتی بوجود بیاد و ترجیحا مستقل از سیستم عامل باشد
2- داده های دیتابیس موجود در دیتاگرید همچنان با جدا کننده . نمایش داده می شوند!

مهرداد صفا
چهارشنبه 27 آذر 1392, 15:18 عصر
سلام.
به جای CurrentUICulture از CurrentCulture استفاده کنید.

Cadivar
چهارشنبه 27 آذر 1392, 22:16 عصر
متاسفانه تغییری نکرد
من با استفاده از کلاس NumberFormatInfo تونستم برای لیبل پیاده سازی کنم اما برای دیتا گرید هنوز موفق نشدم

NumberFormatInfo nfi = new CultureInfo("Fa-IR", false).NumberFormat;
nfi.NumberDecimalSeparator = "/";
float f = 1.25f;
label1.Text = f.ToString(nfi);