نمایش نتایج 1 تا 3 از 3

نام تاپیک: صفر شدن مقادیر Decimal و Double در فرم ایجکسی

  1. #1
    کاربر تازه وارد
    تاریخ عضویت
    بهمن 1390
    محل زندگی
    تهران
    پست
    60

    Question صفر شدن مقادیر Decimal و Double در فرم ایجکسی

    با سلام
    من فرمم ایجکسی هست ، دو نوع متغیر decimal و double دارم
    وقتی اعداد بدون ممیز میزنم مثل 33و67و.. خیلی خوب و قشنگ ارسال میشه اما وقتی اعداد ممیزی میزنم متاسفانه 0 می شوند
    مشکل چیه؟
    e2.png
    e1.png
    کلی گشتم Decimal Model Binder رو پیشنهاد دادن که کار نمیکنه
    امیدوارم کسی بدونه
    ممنون

  2. #2
    کاربر دائمی آواتار bomb23
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    دفتر
    پست
    680

    نقل قول: صفر شدن مقادیر Decimal و Double در فرم ایجکسی

    سلام Decimal Model Binder راه اصلیشه ولی اگه با این روش مشکل دارید به نظرم میتونید مقادیر رو به صورت string ارسال کنید و در آخر تبدیلشون کنید به نوع مد نظرتون.

  3. #3

    Post نقل قول: صفر شدن مقادیر Decimal و Double در فرم ایجکسی

    درود

    اگر به سورس دات نت دقت کنید Decimal.Parse ذاتا Number.Parse را با style پیشفرض Number فراخوانی میکند.

    این بخش از سورس دات نت فریم ورک :


    [__DynamicallyInvokable]
    public static decimal Parse(string s)
    {
    return Number.ParseDecimal(s, NumberStyles.Number, NumberFormatInfo.CurrentInfo);
    }



    زمانی که شما یک type converter را از descriptor دریافت میکنید در زمان model binding اتفاقی که رخ میدهد چیست؟
    شما در واقع یک Decimal Converter را دریافت میکنید برای Parse کردن مقدار ارسالی


    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
    {
    if (value is string)
    {
    // ...


    string text = ((string)value).Trim();


    if (culture == null)
    culture = CultureInfo.CurrentCulture;


    NumberFormatInfo formatInfo = (NumberFormatInfo)culture.GetFormat(typeof(NumberF ormatInfo));
    return FromString(text, formatInfo);


    // ...
    }


    return base.ConvertFrom(context, culture, value);
    }


    مشکل از کجا رخ میدهد ؟ Decimal Converter پیاده سازی FromString را با Float بازنویسی میکند


    internal override object FromString(string value, NumberFormatInfo formatInfo)
    {
    return Decimal.Parse(value, NumberStyles.Float, formatInfo);
    }


    راه حل شما نوشتن یک Convertor اختصاصی میباشد به شکل زیر


    class NumericDecimalConverter : DecimalConverter
    {
    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
    {
    if (value is string)
    {
    string text = ((string)value).Trim();


    if (culture == null)
    culture = CultureInfo.CurrentCulture;


    NumberFormatInfo formatInfo = (NumberFormatInfo)culture.GetFormat(typeof(NumberF ormatInfo));
    return Decimal.Parse(text, NumberStyles.Number, formatInfo);
    }
    else
    {
    return base.ConvertFrom(value);
    }
    }
    }


    در نهایت در هنگام استارت اپلیکیشن میتوانید نمونه جدید را با قدیمی به کمک Reflection بازنویسی کنید


    TypeDescriptor.AddAttributes(typeof(decimal), new TypeConverterAttribute(typeof(NumericDecimalConver ter)));


    شاد باشید.

    میتوانید من را در linked-in دنبال کنید. اینجا

تاپیک های مشابه

  1. ریست شدن مقادیر فرم در زمان اجرا
    نوشته شده توسط Julias99 در بخش C#‎‎
    پاسخ: 1
    آخرین پست: چهارشنبه 19 شهریور 1393, 16:04 عصر
  2. امکان اضافه شدن عکس توسط کاربر در فرم
    نوشته شده توسط Ali2200 در بخش C#‎‎
    پاسخ: 3
    آخرین پست: سه شنبه 02 مرداد 1386, 08:52 صبح
  3. دیده شدن پشت groupbox در فرم در دلفی 7
    نوشته شده توسط ashkan2005 در بخش برنامه نویسی در Delphi
    پاسخ: 5
    آخرین پست: جمعه 25 اسفند 1385, 13:22 عصر
  4. سوا ل در مورد لینک شدن در فرم ها
    نوشته شده توسط MicRo_Programmer در بخش طراحی وب (Web Design)
    پاسخ: 2
    آخرین پست: شنبه 05 اسفند 1385, 20:59 عصر
  5. کنترل مقادیر دریافتی در فرم
    نوشته شده توسط shima_m در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 3
    آخرین پست: سه شنبه 27 خرداد 1382, 09:49 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •