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

نام تاپیک: تبدیل تاریخ در DataGrid

  1. #1

    تبدیل تاریخ در DataGrid

    درود

    ما یه datagrid داریم که اطلاعات رو از sql server می خونه و یه ستون داره که تاریخ و زمان هست بصورت میلادی؛ چطور باید با استفاده از persiancalendar خود .net عمل تبدیل تاریخ میلادی به شمسی رو انجام بدم ؟ یا با shamsidll

    (استفاده از farsilibrary مناسب نیست برای کار من وگرنه همچین قابلیتی داره )


    ممنون

  2. #2
    کاربر دائمی
    تاریخ عضویت
    آبان 1385
    محل زندگی
    مشهد
    سن
    39
    پست
    449
    نقل قول نوشته شده توسط fotovat مشاهده تاپیک
    درود

    ما یه datagrid داریم که اطلاعات رو از sql server می خونه و یه ستون داره که تاریخ و زمان هست بصورت میلادی؛ چطور باید با استفاده از persiancalendar خود .net عمل تبدیل تاریخ میلادی به شمسی رو انجام بدم ؟ یا با shamsidll

    (استفاده از farsilibrary مناسب نیست برای کار من وگرنه همچین قابلیتی داره )


    ممنون
    بهتره یک StoresProcedure بنویسی که عمل تبدیل تاریخ رو در دستور Select انجام بده
    برای اطلاعات بیشتر به این تاپیک یه سری بزن
    https://barnamenevis.org/showth...3%DB%8C&page=3
    من از تابعی که کاربر Linux نوشته استفاده میکنم و تا الان هم هیچ مشکلی نداشتم

  3. #3
    ممنونم اما اگر بخواهیم از طریق .net عمل کنیم به چه صورت هست ؟ آیا باید convert کرد ستون رو ؟

  4. #4
    کاربر دائمی
    تاریخ عضویت
    آبان 1385
    محل زندگی
    مشهد
    سن
    39
    پست
    449
    نقل قول نوشته شده توسط fotovat مشاهده تاپیک
    ممنونم اما اگر بخواهیم از طریق .net عمل کنیم به چه صورت هست ؟ آیا باید convert کرد ستون رو ؟
    به سختی !
    باید تک تک رکوردهای داخل دیتاست رو بخونی و فیلد تاریخشو تبدیل کنی و بعد بریزی سر جاش !!
    اگه از همون StoredProcedure آقای Linux استفاده کنی خیلی ساده تر و سریع تره

  5. #5
    برای اینکه کارت ساده تر بشه اطلاعات رو که داخل گرید ریختی تو ایونت
    CellValueChanged برو و مقدار مورد نظرت رو کانورت کن و در سطری که توش هستی قرار بده


    private void dgv_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {
    if (e.RowIndex == -1) Return;

    if ((e.ColumnIndex == 3) )
    {
    string str = dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
    //Convert
    dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = vlu;
    }

    }


    آخرین ویرایش به وسیله gdevnb : سه شنبه 13 فروردین 1387 در 10:51 صبح دلیل: غلط املایی

  6. #6
    کاربر دائمی
    تاریخ عضویت
    آبان 1385
    محل زندگی
    مشهد
    سن
    39
    پست
    449
    نقل قول نوشته شده توسط gdevnb مشاهده تاپیک
    برای اینکه کارت ساده تر بشه اطلاعات رو که داخل گرید ریختی تو ایونت
    CellValueChanged برو و مقدار مورد نظرت رو کانورت کن و در سطری که توش هستی قرار بده


    private void dgv_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {
    if (e.RowIndex == -1) Return;

    if ((e.ColumnIndex == 3) )
    {
    string str = dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
    //Convert
    dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = vlu;
    }

    }



    برای تعداد رکوردهای زیاد این شیوه مناسب نیست ، بهتره از یک حلقه For استفاده کنه . ولی در هر حال بهتره که یک Stored Procedure بنویسی
    در ضمن کد شما یک حلقه بی نهایت از زخدادها رو ایجاد میکنه ، برای جلوگیری از این مشکل باید یه شرطی رو چک کنی که اگه خودت باعث تغییر رکورد شده باشی رویداد Change رخ نده و این خودش یک سرباز اضافه محسوب میشه .

  7. #7
    حق با شماست
    ولی من در حالت نمایش اطلاعات از این کد استفاده می کردم و DataGrid رو قابل ویرایش نمی کردم در کل روش ساده ای هستش ولی من هم Stored Procedure رو پیشنهاد می کنم

  8. #8
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059
    سلام
    من برای کنترلر DataGridView (و نه DataGrid) یک نوع Column جدید درست کرده ام که به راحتی در مجموعه Columns ها در زمان طراحی (در لیست مربوطه دیده میشود.) جای میگیرد و با انتخاب این نوع ستون، دیگر هیچ کد و کار خاصی لازم نیست، و اطلاعات را شمسی نشان میدهد و اجازه ویرایش شمسی را میدهد ولی اطلاعات را از دیتابیس اصلی میلادی (System.DateTime یا همان Date در VB) میخواند و مینویسد.

    اگر بدردتان میخورد میتوان آخرین نسخه dll اش را برایتان آپلود کنم ولی توجه کنید که با DataGridView کار میکند نه DataGrid قدیمی موجود در دات نت.

  9. #9
    نیکی و پرسش!
    آخرین ویرایش به وسیله gdevnb : دوشنبه 19 فروردین 1387 در 20:55 عصر

  10. #10

    DataGrid یا Datagridview

    می خواستم یه datagrid یا یک datagridview داشته باشم که داخل grid مورد نظر یه combobox با سه ستون idو name و family وجود داشته باشد و بتوان grid را با combo مورد نظر update کرد

  11. #11
    کاربر دائمی آواتار ezamnejad
    تاریخ عضویت
    آبان 1386
    محل زندگی
    جلوي مانيتور
    پست
    257
    نقل قول نوشته شده توسط __H2__ مشاهده تاپیک
    سلام
    من برای کنترلر DataGridView (و نه DataGrid) یک نوع Column جدید درست کرده ام که به راحتی در مجموعه Columns ها در زمان طراحی (در لیست مربوطه دیده میشود.) جای میگیرد و با انتخاب این نوع ستون، دیگر هیچ کد و کار خاصی لازم نیست، و اطلاعات را شمسی نشان میدهد و اجازه ویرایش شمسی را میدهد ولی اطلاعات را از دیتابیس اصلی میلادی (System.DateTime یا همان Date در VB) میخواند و مینویسد.

    اگر بدردتان میخورد میتوان آخرین نسخه dll اش را برایتان آپلود کنم ولی توجه کنید که با DataGridView کار میکند نه DataGrid قدیمی موجود در دات نت.
    چی شد پس چرا آپلود نکردید ؟؟؟؟؟

  12. #12
    کاربر دائمی آواتار reza6384
    تاریخ عضویت
    آبان 1386
    محل زندگی
    تهران - شهرک ژاندارمری
    سن
    41
    پست
    740
    در یکی از تاپیک های این تالار راجع به تقویم فارسی توی دیتاگرید بحث شده بود که الان لینکش و اون دوستی که اینSolution رو داده بودن یادم نیست.

    ایشون گفتن که توی یک جدول که دو تا ستون داره ، یکی روز میلادی از نوع DateTime و اون یکی روز فارسی از نوع String. که روز میلادی Primary Key این جدوله. توی این جدول روزهای میلادی و روز فارسیش رو از 10 سال پیش تا 10 سال آینده ذخیره کردن و بعد هر جا که نیاز دارن روز فارسی رو از روی اون جدول می خونه ، مثلا :


    Select F.Factor_ID,PC.PersianDate From Factors As F, PersianCalendar As PC
    Where F.FactorDate = PC.EnglishDate


    اگر بخواهید برای نمایش 1000 رکورد 1000 بار تابع تبدیل تقویم رو اجرا کنید خیلی بار زیادی به سیستم تحمیل می کنید و زمان زیادی هم مصرف می شه. اما با این کار به راحتی مشکلتون حل می شه و حتی من از این جدول توی Crystal Reports هم استفاده کردم و بازهم جا داره که از راه حل اون دوست عزیزم تشکر کنم.

  13. #13
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059

    Post ستون تاریخ شمسی برای کنترلر DataGridView بدون نیاز به هیچ کد نویسی !

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

    در نتیجه در تاپیک هایی که شرکت میکنم، معمولاً چند روز بین پستهایم فاصله می افتد.
    در همینجا از همه دوستان عضر خواهی میکنم و از صبرشان و شکیبایی شان تشکر میکنم.

    نسخه فوق در این مورد فوق العاده ساده است و البته صد در صد مشکل کارایی و سرعت ندارد.
    چون تبدیل فقط در مورد سلول هایی که در محدوده دید تأیین شده توسط scroll هستند انجام میشود و نه بیشتر.
    (یعنی سلول هایی از گراید که دیده میشوند)
    تبدیل برعکس هم فقط وقتی ویراشی در سلولی رخ دهد، در همان سلول اتفاق می افتد.

    مدتها است که دارم با دستورات +GDI کنترلر کامل تقویم شمسی با قابلیت تغییر در هر جزء کوچک و به دلخواه کردن.
    ولی به علت کمی وقت تمام نشده.
    اگر تمام شود بی شک همین ستون را پیشرفته میکنم، به طوری که کنترلر تقویم به صورت combo در سلول با کلیک نمایش داده شود.
    ولی فعلاً که وعده ...

    این نمونه شامل یک برنامه نمونه به همراه dll است.
    برنامه نمونه جدولی با دو فیلد دارد ولی گراید سه فیلد دارد.
    فیلد تاریخ یک بار در ستون عادی نمایش داده شده و یکبار هم در ستون تاریخ شمسی.
    برنامه نمونه با 2008 وتحت فریم ورک 2 درست شده ولی در 2005 باز نمیشود.
    در 2005 برای دیدن برنامه نمونه در VS میتوانید NewProject بزنید فرم اصلی را به پروژه جدید اضافه کنید.
    (البته میتوانید به دیدن exe برنامه در شاخه bin هم اکتفا کنید.)

    طریقه استفاده هم راحت است، بعد از اضافه کردن Refrence در تعریف ستون های datagridview برای هر ستون که تاریخی بود از DataGridViewIrDateColumn استفاده کنید.
    جمیعاً موفق باشید.

    لینک دانلود جدید:
    http://h02.ir/Download.aspx?File=Dat...DateColumn.zip
    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله __H2__ : چهارشنبه 21 اسفند 1387 در 22:10 عصر دلیل: لینک دانلود جدید

  14. #14
    کاربر دائمی آواتار ezamnejad
    تاریخ عضویت
    آبان 1386
    محل زندگی
    جلوي مانيتور
    پست
    257
    اگر براتون امکان داره سورس برنامه را هم قرار بدهید .

  15. #15
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059
    سلام
    الان نمیتوانم، و اصلاً نمیخواستم پست دهم.
    ولی گفتم باز صبر دوستان تمام میشود ....
    کمی فرصت دهید ...

  16. #16
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059
    سلام
    این نمونه ساده برایتان درست کردم، که با وجود کد بسیار مختصر ولی به خوبی کار میکند.
    میتوانید به دلخواه و به سادگی قابلیت هایش را افزایش دهید، مثلاً تعریف property برای تایین محدوده مجاز انتخاب کاربر (Max و Min) و...

    کد واضح است و نکته قابل ذکری ندارد. ولی مطلب جالب تشخیص DataGridView از ستون جدید است.
    من خودم وقتی اولین بار کد اولیه را نوشتم، (بگذریم که از کارکردنش هم اطمینان نداشتم) گفتم سر تشخیص خودکارش در لیست DGV گیر میکنم و شاید مجبور بشم با کد دستی ستون جدید را خوراک DGV کنم!
    ولی با کمال خوشحالی دیدم خود DGV اسمبلی های Refrence را اسکن کرده و ستون جدید را تشخیص داده و به لیست اضافه کرده.


    در مورد آن نمونه قبلی همراه با dll ای که گذاشتم نکته ای قابل ذکر است.
    به کلاسس ستون مورد نظر چند خصوصیت زیر را اضافه کرده ام
    MaxDate حداکثر تاریخ قابل انتخاب توسط کاربر
    MinDate حداقل تاریخ قابل انتخاب توسط کاربر
    IsSqlServerSmallDateTime حداکثر و حداقل متانظر گنجایش نوع فیلد smalldatetime در SQLServer شوند.
    Format
    که فرمت نحوه نمایش را مشخص میکند و از قواعد حاکم بر Date.ToString میلادی دات نت پیروی میکند. مثلاً در دات نت MMMM در رشته فرمت نشانگر نام ماه است، در این خصویت هم همین طور است ولی با نام و معیارهای شمسی.

    و نشان دادن و تبدیل طبق رشته فرمت به درستی و کاملی کار میکند مثل:
    (مثلاً اگر تاریخ 24 فرودین 1387 بود)

    yyyy/MM/dd -> 1387/01/24 (پیش فرض)
    yyyy/M/d -> 1387/1/24
    yy/MM/dd -> 87/01/24

    yyyy-MM-dd -> 1387-01-24


    ddddd dd MMMM yyyy -> شنبه 24 فروردین 1387

    ,...
    ,...
    etc

    (یک سری فرمت ها که فاصله دارند در حالت RightToleft و LeftToRight شاید یک چرخش برعکس در نمایش پیدا کنند.)
    اما وقت نکرده ام تبدیل برعکس dddd دارها را کامل کنم، مثلاً میتواند "24 فروردین 1387" را به معادل میلادی تبدیل کند ولی نمیتواند "شنبه 24 فروردین 1387" را به معادل میلادیش تبدیل کند، در صورت نیاز به dddd فقط باید در DGV های ReadOnly (مثلاً میخواهید گزارشی را نشان دهید) استفاده کنید.
    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله __H2__ : چهارشنبه 21 اسفند 1387 در 22:10 عصر دلیل: آپدیت !

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

  1. انتخاب سطر خاص از DataGrid
    نوشته شده توسط ***UNIQUE*** در بخش C#‎‎
    پاسخ: 3
    آخرین پست: شنبه 11 اسفند 1386, 16:59 عصر
  2. گزارش گیری از DataGrid ... !
    نوشته شده توسط a_kheirabadi در بخش گزارش سازی با Crystal Report
    پاسخ: 6
    آخرین پست: چهارشنبه 08 شهریور 1385, 21:36 عصر
  3. کمک: مشکل در استفاده از DataGrid
    نوشته شده توسط soosan در بخش C#‎‎
    پاسخ: 2
    آخرین پست: پنج شنبه 03 آذر 1384, 10:14 صبح
  4. datagrid
    نوشته شده توسط حبیب در بخش برنامه نویسی در 6 VB
    پاسخ: 1
    آخرین پست: یک شنبه 13 شهریور 1384, 21:40 عصر

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

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