سلام
این نمونه ساده برایتان درست کردم، که با وجود کد بسیار مختصر ولی به خوبی کار میکند.
میتوانید به دلخواه و به سادگی قابلیت هایش را افزایش دهید، مثلاً تعریف 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 (مثلاً میخواهید گزارشی را نشان دهید) استفاده کنید.