برگزیده های پرشین تولز

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

bit

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

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

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


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

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

با تشکر
 

hosseinkazemi

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

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

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


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

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

با تشکر
 

miladkdz

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

b_khoshbin

کاربر تازه وارد
تاریخ عضویت
3 مارس 2005
نوشته‌ها
1
لایک‌ها
0
به نقل از bit :
با سلام به حرفه اي هاي عزيز

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

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


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

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

با تشکر

دوست عزيز شما بايد بدونيد كه اين مربوط به ديتا بايندينگ فرم ها مي شود. در هنگام بايندينگ دو ايونت فرمت و پارس ايجاد مي شوند كه شما بايد براي آنها ايونت هندلر بنويسيد.
 

amirkarimi

کاربر تازه وارد
تاریخ عضویت
17 فوریه 2005
نوشته‌ها
17
لایک‌ها
0
محل سکونت
Tehran
به نقل از bit :
با سلام به حرفه اي هاي عزيز

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

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


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

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

با تشکر

چرا از DataList استفاده نميكني ؟ هر خطي رو كه ميخواد نشون بده يه رويداد داره ! متاسفنه رويدادش يادم رفته :wacko: اگه يادم اومد بهت ميگم . توي اون رويداد ميتوني هر كاري بخواي بكني ! از جمله تبديل تاريخ . :D
 

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 استفاده کنید
 
بالا