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

نام تاپیک: نمایش تاریخ شمسی در گرید ویو و ذخیره میلادی در دیتابیس

  1. #1

    نمایش تاریخ شمسی در گرید ویو و ذخیره میلادی در دیتابیس

    من برای اینکه کاربر تاریخ شمسی رو تو گرید ویو انتخاب کنه از یک کنترل DateTimePicker فارسی استفاده کردم ولی برای ذخیره تاریخ در دیتابیس مجبور شدم که از نوع nvarchar استفاده کنم ... تا الان برای فیلتر کردن اطلاعاتم رشته های تاریخ رو با هم مقایسه میکردم و مشکلی هم نداشته ...

    - بدلیل انکه نوع تاریخ رو Datetime نگرفتم به چه مشکلاتی ممکنه بر بخورم؟

    - ایا کنترلی برای DataGridView دارید که تاریخ رو به صورت میلادی ذخیره و به صورت شمسی نمایش بده و کابر بتونه اونو در گرید ویرایش کنه؟؟؟

  2. #2
    کاربر دائمی آواتار NIK
    تاریخ عضویت
    خرداد 1389
    سن
    39
    پست
    293

    نقل قول: نمایش تاریخ شمسی در گرید ویو و ذخیره میلادی در دیتابیس

    من هم قبلا در یک پروژه کوچیک برای تاریخ از nvarchar استفاده کردم. اما بعداً که خواستم برنامه رو کمی توسعه بدم برای بعضی تحلیل های کوچیک مجبور شدم پردازشهای زیادی انجام بدم که سرعت برنامه رو کاهش میداد.
    مشکل نمایش تاریخ شمسی در گریدویو رو من به این صورت حل کردم.
    با استفاده از یک کامپوننت تاریخ ورودی رو به میلادی تبدیل کرده و در دیتابیس به صورت Datetime ذخیره کردم.
    هنگام گزارش گیری، نتیجه Query مورد نظر رو در یک data table ریختم و بعد سطر به سطر تاریخ رو تبدیل به شمسی کردم و دیتاسورس گریدویو رو همون data table قرار دادم.
    آخرین ویرایش به وسیله NIK : چهارشنبه 26 خرداد 1389 در 12:43 عصر دلیل: توضیح بیشتر

  3. #3
    مدیر بخش آواتار mmd2009
    تاریخ عضویت
    اردیبهشت 1403
    محل زندگی
    تهران
    پست
    2,393

    نقل قول: نمایش تاریخ شمسی در گرید ویو و ذخیره میلادی در دیتابیس

    سلام دوست عزیز

    عکس های زیر رو ببین مربوط میشه به یکی از برنامه هام

    یعنی شما نمیخوای تاریخ شمسی تو بانکت اینطوری ذخیره بشه؟



    و تو گرید ویو اینطوری نمایش داده بشه ؟



    زنده باد یوونتوس


    کسی که به خود اطمینان دارد به تعریف دیگران احتیاج ندارد. «گوستاو لوبون»


  4. #4

    نقل قول: نمایش تاریخ شمسی در گرید ویو و ذخیره میلادی در دیتابیس

    سلام
    در مورد نمایش همون طوری که تو تصویر دوی شما هست درسته ... میخوام به همون شکل نمایش داده بشه و کاربر با یک DateTimePicker در گرید ویو بتونه اونو ویرایش کنه و ذخیره کنه

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

  5. #5

    نقل قول: نمایش تاریخ شمسی در گرید ویو و ذخیره میلادی در دیتابیس

    درسته این کار رو من بلدم تاریخ رو شمسی کنم و در گرید نمایش بدم ولی نمیخوام از سلول های عادی گرید استفاده کنم میخوام یک Datetime picker در یک سلول بزارم و اون تاریخ میلادی رو از دیتابیس بخونه به صورت شمسی نمایش بده و بعد از ویرایش توسط کاربر دوباره به صورت میلادی در دیتابیس ذخیره بشه ...


    اینجا دو تا مسئله هست :

    ا- یک تایم پیکر رو باید به سلول گرید اضافه کنیم
    2-تایم پیکر باید توانایی ساپورت تاریخ شمسی و در نهایت تبدیل اون در زمان ذخیره به میلادی رو داشته باشه ...

  6. #6
    کاربر دائمی آواتار NIK
    تاریخ عضویت
    خرداد 1389
    سن
    39
    پست
    293

    نقل قول: نمایش تاریخ شمسی در گرید ویو و ذخیره میلادی در دیتابیس

    نقل قول نوشته شده توسط ostovarit مشاهده تاپیک
    ا- یک تایم پیکر رو باید به سلول گرید اضافه کنیم
    2-تایم پیکر باید توانایی ساپورت تاریخ شمسی و در نهایت تبدیل اون در زمان ذخیره به میلادی رو داشته باشه ...
    تایم پیکر توانایی ساپورت تاریخ شمسی که کامپوننت PersianDate میده نداره.

    شما باید خودتون یه تایم پیکر کوچولو بسازید.

  7. #7

    نقل قول: نمایش تاریخ شمسی در گرید ویو و ذخیره میلادی در دیتابیس

    میدونم ولی کلا روش ساخت این جور کامپوننت ها رو بلد نیستم که بخوام کنترل های دیگره رو overright کنم و بهشون خاصیت های جدید اضافه کنم ...

    یکی از دوستان قرار بود اموزشی برای ساخت کنترل های این چنینی بزاره که من هنوز چیزی ندیدم ...

    اگر مقاله مطلب که کامل و ساده توضیح بده داشتید کمک میکنه ...

    لینک msdn واسم نزارید ...

    اموزش ساده از پایه میخوام

  8. #8
    کاربر تازه وارد
    تاریخ عضویت
    خرداد 1389
    محل زندگی
    تهران-گنبد کاووس
    پست
    43

    نقل قول: نمایش تاریخ شمسی در گرید ویو و ذخیره میلادی در دیتابیس

    با این script یه تابع به بانک sql اضافه کن و برای خواندن توسط select نام فیلدت را با این تابع استفاده کن
    select dbo.miladiToShamsi(fildName) from Table name

    CREATE FUNCTION [dbo].[MiladiTOShamsi] (@MDate DateTime)
    RETURNS Varchar(10)
    AS
    BEGIN
    DECLARE @SYear as Integer
    DECLARE @SMonth as Integer
    DECLARE @SDay as Integer
    DECLARE @AllDays as float
    DECLARE @ShiftDays as float
    DECLARE @OneYear as float
    DECLARE @LeftDays as float
    DECLARE @YearDay as Integer
    DECLARE @Farsi_Date as Varchar(100)
    SET @MDate=@MDate-CONVERT(char,@MDate,114)

    SET @ShiftDays=466699 +2
    SET @OneYear= 365.24199


    SET @SYear = 0
    SET @SMonth = 0
    SET @SDay = 0
    SET @AllDays = CAst(@Mdate as Real)

    SET @AllDays = @AllDays + @ShiftDays

    SET @SYear = (@AllDays / @OneYear) --trunc
    SET @LeftDays = @AllDays - @SYear * @OneYear

    if (@LeftDays < 0.5)
    begin
    SET @SYear=@SYear+1
    SET @LeftDays = @AllDays - @SYear * @OneYear
    end;

    SET @YearDay = @LeftDays --trunc
    if (@LeftDays - @YearDay) >= 0.5
    SET @YearDay=@YearDay+1

    if ((@YearDay / 31) > 6 )
    begin
    SET @SMonth = 6
    SET @YearDay=@YearDay-(6 * 31)
    SET @SMonth= @SMonth+( @YearDay / 30)
    if (@YearDay % 30) <> 0
    SET @SMonth=@SMonth+1
    SET @YearDay=@YearDay-((@SMonth - 7) * 30)
    end
    else
    begin
    SET @SMonth = @YearDay / 31
    if (@YearDay % 31) <> 0
    SET @SMonth=@SMonth+1
    SET @YearDay=@YearDay-((@SMonth - 1) * 31)
    end
    SET @SDay = @YearDay
    SET @SYear=@SYear+1

    SET @Farsi_Date = CAST (@SYear as VarChar(10)) + '/' + CAST (@SMonth as VarChar(10)) + '/' + CAST (@SDay as VarChar(10))
    Return @Farsi_Date



    END

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

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