تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 1 از 2 12 آخرآخر
نمايش نتايج 1 به 10 از 12

نام تاپيک: مشکل در تاریخ

  1. #1
    کاربر فعال آنتی‎ویروس و نرم‎افزارهای امنیتی M.Hashemi's Avatar
    تاريخ عضويت
    Sep 2008
    محل سكونت
    کرمان - رفسنجان
    پست ها
    726

    پيش فرض مشکل در تاریخ

    با سلام
    برای این که استانداردها را رعایت کنم تاریخ را به صورت DateTime تعریف کردم.
    توابع تبدیل شمسی به میلادی و میلادی به شمسی را هم پیدا کردم.
    حال این کد را در چه event بنویسم که برای تک تک رکوردها در DataGridView اعمال بشه و زمانی که کاربر با کلیک کردن روی سر ستون ها می خواهد جدول را sort کند مشکلی به وجود نیاد.
    با تشکر

  2. #2
    پروفشنال mahdi7s's Avatar
    تاريخ عضويت
    Sep 2007
    محل سكونت
    هر جایی می تونه باشه
    پست ها
    757

    پيش فرض

    با سلام

    -برای انجام این کار اگر در برنامه از یک معماری چند لایه استفاده می کنید به راحتی می توانید کلاس مدلتان را طوری طراحی کنید که این کار را انجام دهد.مثلا اگر در کلاس مدلتان یک خصیصه با نام Date و از نوع DataeTime دارید که تاریخ میلادی را از دیتابیس مستقیما به داخل آن می ریزید و یک خصیصه فقط خواندنی دیگر به نام PersianDate دارید که تاریخ تبدیل شده فارسی را بر می گرداند(لازم به ذکر است با اضافه شدن DLR به دات نت 4 و با استفاده از مدل های دینامیکی این کار بسیار ساده تر خواهد بود و کد نویسی خیلی کمتری هم دارد)

    -شی DataTable واکشی شده را قبل از بایند کردن به DataGridView و نمایش آن تغییر دهید تا تاریخی که می خواهید را نمایش دهد و بعد به GridView بایندش کنید

    -GridView یک رویداد به نام CellFormating داره که داخلش می تونید مقدار یک ستون را تغییر دهید(البته نوع یک ستون را نمی توانید عوض کنید!)

    موفق باشید

  3. این کاربر از mahdi7s بخاطر این مطلب مفید تشکر کرده است


  4. #3
    کاربر فعال آنتی‎ویروس و نرم‎افزارهای امنیتی M.Hashemi's Avatar
    تاريخ عضويت
    Sep 2008
    محل سكونت
    کرمان - رفسنجان
    پست ها
    726

    پيش فرض

    با سلام
    از پاسخ mahdi7s متشکرم
    من مدت زیادی نیست که با visual studio کار می کنم و اطلاعات زیادی ندارم.
    اما از گفته های شما این را برداشت کردم :
    1- ابتدا با استفاده از کد زیر یک ستون یا فیلد به جدولم در DataSet اضافه کردم.
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    2- با استفاده از یک حلقه for که شمارنده ان از 0 تا تعداد رکوردها است را نوشتم و در ان خط به خط میلادی را به شمسی تبدیل کرده و در ستون جدید ذخیره کردم و DataSet را Bind کردم.
    البته تمامی کد ها را در OnLoad نوشتم.
    ایا من راه درستی را رفتم؟
    ایا راه دیگری وجود دارد؟
    با تشکر

  5. #4
    کاربر فعال آنتی‎ویروس و نرم‎افزارهای امنیتی M.Hashemi's Avatar
    تاريخ عضويت
    Sep 2008
    محل سكونت
    کرمان - رفسنجان
    پست ها
    726

    پيش فرض

    با سلام
    یک راه دیگر هم وجود دارد که به جز تاریخ میلادی تاریخ شمسی را نیز در پایگاه داده ذخیره کنیم.
    میلادی را از نوع DateTime و شمسی را از نوع string .
    که در این صورت برای نمایش در DataGridView و مشکلی نداریم و از فیلد شمسی استفاده می کنیم و برای استفاده از توابع تاریخ از فیلد DateTime استفاده می کنیم.
    نظر شما چیست؟
    با تشکر

  6. #5
    پروفشنال mahdi7s's Avatar
    تاريخ عضويت
    Sep 2007
    محل سكونت
    هر جایی می تونه باشه
    پست ها
    757

    پيش فرض

    یک راه دیگر هم وجود دارد که به جز تاریخ میلادی تاریخ شمسی را نیز در پایگاه داده ذخیره کنیم.
    میلادی را از نوع DateTime و شمسی را از نوع string .
    که در این صورت برای نمایش در DataGridView و مشکلی نداریم و از فیلد شمسی استفاده می کنیم و برای استفاده از توابع تاریخ از فیلد DateTime استفاده می کنیم.
    نظر شما چیست؟
    خوب است - اما باید به یک چیز دقت کنید:
    برنامه شما در UI تماما" با تاریخ شمسی کار می کند ولی در کد با تاریخ میلادی-و هر گونه تغییری در تاریخ شمسی باید در تاریخ میلادی هم اعمال شود و بلعکس (البته این تبدیل لازم نیست همه جا انجام شود و بهتر است در موارد ثبت و ویرایش تاریخ انجام شود)

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

    در کل و از نظر من راه اولی که گفتم بهتر است و از نوشته شدن کدهای تکراری و اسپاگتی هم جلوگیری می کند (قشنگ تر از همش آن قسمت دینامیکش هست!).

    موفق باشید.

  7. این کاربر از mahdi7s بخاطر این مطلب مفید تشکر کرده است


  8. #6
    کاربر فعال آنتی‎ویروس و نرم‎افزارهای امنیتی M.Hashemi's Avatar
    تاريخ عضويت
    Sep 2008
    محل سكونت
    کرمان - رفسنجان
    پست ها
    726

    پيش فرض

    با سلام
    mahdi7s عزیز برای پست سوم نظری ندارید؟
    بقیه دوستان در مورد این مسئله نظری ندارند؟
    با تشکر

  9. #7
    اگه نباشه جاش خالی می مونه L u K e !'s Avatar
    تاريخ عضويت
    Mar 2009
    محل سكونت
    Qazvin
    پست ها
    441

    پيش فرض

    نه اصلا روش خوبی نیست این کار
    واسه جستجو به مشکل بر می خوری
    خوب کاری نداره که شما برنامه تو بر 3layer پیاده کن بعد موقع لود کردن توی برنامه نویسی String در نظرش بگیر و شمسی ش کن ولی موقع insert و update میلادی ش کن و بفرست به بانکت

  10. این کاربر از L u K e ! بخاطر این مطلب مفید تشکر کرده است


  11. #8
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    همانطور که در خارج از گراید میتوانید کنترلری برای تقویم فارسی داشته باشید که پایانه ورودی/خروجی ان در برنامه میلادی ولی نمایه دیداری و ارتباط با کاربر ان شمسی باشد.
    در گراید هم عیناً میتوانید همچین الگویی را پیاده سازی کنید.

    میتوانید ستون سفارشی برای گراید طراحی کنید که مستقیم به فیلد تاریخ (میلادی) دیتابیس وصل شود ولی تاریخ را شمسی نشان داده و شمسی از کاربر بگیرد.
    حتی با صرف کمی وقت بیشتر میتوان ان را به حالت Combo در داخل گراید هم ارتقاء داد.

    این روش بهترین بازدهی دارد.
    چون تبدیل به شمسی فقط برای فیلدهایی رخ میدهد که الآن در روی قاب گراید در حال دیده شدن هستند و تبدیل به میلادی هم فقط وقتی رخ میدهد که موردی توسط کاربزر ویرایش شود.
    این مورد هم از جهت کدنویسی خیلی ساده تر و بدون پیچیدگی است و هم بازدهی خوبی دارد.

    مثال یک نمونه عملی:
    http://support.h02.ir/fwlink/?LinkId=1002435777
    موفق باشید.

  12. این کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده است


  13. #9
    کاربر فعال آنتی‎ویروس و نرم‎افزارهای امنیتی M.Hashemi's Avatar
    تاريخ عضويت
    Sep 2008
    محل سكونت
    کرمان - رفسنجان
    پست ها
    726

    پيش فرض

    با سلام
    از پاسختون متشکرم L u K e !
    اما به نظر شما اگر این کار را انجام بدم لود form طولانی نمیشه؟(حدود 1000 رکورد).
    با تشکر

  14. #10
    کاربر فعال آنتی‎ویروس و نرم‎افزارهای امنیتی M.Hashemi's Avatar
    تاريخ عضويت
    Sep 2008
    محل سكونت
    کرمان - رفسنجان
    پست ها
    726

    پيش فرض

    با سلام
    از _h2_ عزیز متشکرم.
    من قبلا دلفی کار می کردم و در events های مربوط به grid ان یک event به نام OnCalcField بود که برای تک تک رکوردها اجرا می شد و من می توانستم برای تک تک رکوردها هنگام load در grid تبدیل تاریخ را انجام دهم.
    حال یک سوال :
    1- _h2_ عزیز لطفا توضیح دهید کد تبدیل تاریخ را در چه event از dataGridView نوشته اید؟
    (چون اگر اشتباه نکنم Grid را به صورا dll گذاشته بودید و تمام مشکل من هم دقیقا همان کد های هستند که باید در grid نوشته شوند.)
    ممنون میشم جواب دهید.
    با تشکر

صفحه 1 از 2 12 آخرآخر

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •