آژانس هواپیماییexchanging

C#, Sql Server, DataGrid, تاريخ شمسی

شروع موضوع توسط bit ‏4 جولای 2004 در انجمن Visual C#.Net

  1. bit

    bit کاربر تازه وارد

    تاریخ عضویت:
    ‏4 جولای 2004
    نوشته ها:
    1
    تشکر شده:
    0
    با سلام به حرفه اي هاي عزيز

    من يه DataGrid توی سی شارپ دارم که به یه بانک اطلاعاتی Bind شده.
    فيلدهای تاريخ رو ميلادی نشون ميده چون من به صورت ميلادی توی بانک ذخيره کرده ام.

    چه کار ميشه کرد که اونها رو شمسی نشون بده؟


    کد های تبديل رو دارم و برای TextBox ها ازشون استفاده کردم و مشکل حل شد.

    اما برای DataGrid مشکل همچنان باقی است.

    با تشکر
     
  2. hosseinkazemi

    hosseinkazemi کاربر تازه وارد

    تاریخ عضویت:
    ‏8 آگوست 2003
    نوشته ها:
    17
    تشکر شده:
    0
    محل سکونت:
    Tehran
    ببين عزيز
    به خاطر ماهيتي كه DataGrid داره تو نميتوني روش هيچ الگوريتمي اعمال كني.اگر كه ميبيني كه تونستي مشكلت رو روي textBox ها حل كني بخاطر اينه كه ايندو با هم زمين تا آسمون فرق ميكنن.من هم خودم تا حالا براي چند جا چند بر نامه با C#و SQL Server نوشتم.
    بهترين راهي كه به نظرم ميومد اينه كه اصلا تاريخ رو به صورت جدا جدا بعني روز ، ماه ، سال وارد پايگاه داده ات كني. اون جوري همه چيز دستت هست.
     
  3. miladkdz

    miladkdz کاربر تازه وارد

    تاریخ عضویت:
    ‏30 آگوست 2003
    نوشته ها:
    176
    تشکر شده:
    0
    محل سکونت:
    Tehran, Ekbatan
    ميتوني از كنترل Table استفاده كني...خيلي بهتره!
     
  4. b_khoshbin

    b_khoshbin کاربر تازه وارد

    تاریخ عضویت:
    ‏3 مارس 2005
    نوشته ها:
    1
    تشکر شده:
    0
    دوست عزيز شما بايد بدونيد كه اين مربوط به ديتا بايندينگ فرم ها مي شود. در هنگام بايندينگ دو ايونت فرمت و پارس ايجاد مي شوند كه شما بايد براي آنها ايونت هندلر بنويسيد.
     
  5. amirkarimi

    amirkarimi کاربر تازه وارد

    تاریخ عضویت:
    ‏17 فوریه 2005
    نوشته ها:
    16
    تشکر شده:
    0
    محل سکونت:
    Tehran
    چرا از DataList استفاده نميكني ؟ هر خطي رو كه ميخواد نشون بده يه رويداد داره ! متاسفنه رويدادش يادم رفته :wacko: اگه يادم اومد بهت ميگم . توي اون رويداد ميتوني هر كاري بخواي بكني ! از جمله تبديل تاريخ . :D
     
  6. Saman01

    Saman01 کاربر تازه وارد

    تاریخ عضویت:
    ‏29 آپریل 2007
    نوشته ها:
    6
    تشکر شده:
    0
    میتونی تو یه پروژه CLR ای یک User Defiend type بسازی به اسم jalali Date
    , تو SQL server تاریخ ها رو به شمسی تبدیل کنی باید CLR بلد باشی تا User Defiend های مورد استفاده رو خودت بسازی
    در .Net
    طرز کار اینجوری هستش که User Defiend type ها در Data base بصورت String نگه داشته میشه
    و باید یک بار تابع Tostring , یک بار Pars را صدا بزنیم
    من کدشو این جا میذارم:
    کد:
    using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.Data.SqlTypes;
    using Microsoft.SqlServer.Server;
    using System.Globalization;
    
    [Serializable]
    [Microsoft.SqlServer.Server.SqlUserDefinedType(Format.Native)]
    public struct JalaliDate : INullable
    {
        public override string ToString()
        {
            if (m_Null)
            {
                return "";
            }
            else
            {
                return string.Format("{0}-{1}-{2}", year, month, day);
            }
        }
    
        public bool IsNull
        {
            get
            {
                // Put your code here
                return m_Null;
            }
        }
    
        public static JalaliDate Null
        {
            get
            {
                JalaliDate h = new JalaliDate();
                h.m_Null = true;
                return h;
            }
        }
    
        public static JalaliDate Parse(SqlString s)
        {
            if (string.IsNullOrEmpty(s.Value))
                return JalaliDate.Null;
            JalaliDate u = new JalaliDate();
            string[] values = s.Value.Split(new char[] { '-' });
            u.year = int.Parse(values[0]);
            u.month = int.Parse(values[1]);
            u.day = int.Parse(values[2]);
            // Put your code here
            return u;
        }
    
        public DateTime GregorianValue
        {
            get
            {
                PersianCalendar pc = new PersianCalendar();
                DateTime dt = new DateTime(year, month, day, pc);
                return dt;
            }
        }
    
        public static JalaliDate JalaliValue(DateTime gregorianValue)
        {
            PersianCalendar pc = new PersianCalendar();
            int y, m, d;
            y = pc.GetYear(gregorianValue);
            m = pc.GetMonth(gregorianValue);
            d = pc.GetDayOfMonth(gregorianValue);
            JalaliDate ans = new JalaliDate();
            ans.year = y;
            ans.month = m;
            ans.day = d;
            return ans;
        }
    
        public JalaliDate AddDays(int days)
        {
            return JalaliValue(GregorianValue.AddDays(day));
        }
    
        private int year;
        private int month;
        private int day;
    
        // Private member
        private bool m_Null;
    }
    
    این کد و در .Net
    Deploy کنید به زبان C# هم هست.:rolleyes: از این به بعد JalaliDate یک تایپ هستش مثل Char , nvarchar ,... و میتونید بجای Datetime از JalaliDate استفاده کنید