PDA

View Full Version : حرفه ای: ارائه کمپوننت تاریخ شمسی و میلادی



bachebahal_1363
سه شنبه 11 اسفند 1388, 13:35 عصر
سلام خدمت دوستان
من در این تاپیک یک کمپوننت تاریخ که حاصل دست رنج خودم هست را ارائه می کنم که با ایده گرفتن از کمپوننت تاریخ Microsoft Ajax برای فارسی زبانان و کسانی که می خواهند از تاریخ شمسی و میلادی به طور همزمان استفاده کنند درست شده است

یادآوری می کنم این کمپوننت برای اولین بار در سایت برنامه نویس ارائه گردیده است.
لطفا نظرات خودتون را ارسال کنید.
طرز استفاده از این dll رو هم می گم تا کمترین مشکل رو در استفاده داشته باشید
1- ابتدا dll رو یا به پروژه خودتون addReference کنید یا در شاخه Bin کپی نمائید
2- در صفحه aspx مورد نظر تگ زیر را در زیر تگ Page کپی نمائید

<%@ Register Assembly="NNPCalendar" Namespace="NNPCalendar" TagPrefix="NNP" %>

3- حالا تگ کمپوننت به المانهای صفحه اضافه گردید و به صورت زیر در هر جایی از صفحه از آن استفاده نمائید.

<NNP:CalendarBehavior ID="txtReplyEndDate" runat="server" Required="false" />
4- لازم به ذکر است که در استفاده از این کمپوننت در هر جایی از صفحه احتیاج به تنظیم کردن direction مربوط به style المانهایی که این کمپوننت به عنوان Child آن المان تعریف شده است نمی باشد.(به زبان راحت تر rtl و ltr نمی خواد تغییر کنه)
5- برای فعال کردن اتوماتیک Required برای این کمپوننت فقط کافیه پراپرتی Required را برابر true ست نمائید
6- باز هم برای راحتی کار یک Sample هم گذاشتم
نمایی از این کمپوننت را در زیر مشاهده کنید :

hamed2661
سه شنبه 11 اسفند 1388, 14:06 عصر
ممنون عزيز داونلود كردم استفاده مي كنيم ببينيم چي به چيه.

saghari
سه شنبه 11 اسفند 1388, 15:53 عصر
با سلام دوست عزیز
من فایل شما رو به صفحه اضافه کردم ولی تنها چیزی که هست یه تکست باکس هست که بغلش یه آیکن تقویم وحود داره و هیچ کار خاصی انجام نمیده.
اگه ممکنه یا دربارش توضیح بدید و یا یه نمونه پروژه Sample براش بزارید.
ضمنا اگه فقط قصد شما این نیست که در نهایت بگیم ظاهرش خوبه یا نه پیشنهاد میکنم مد مربوطه رو بزارید تا هم عزیزانی که میخوان بررسی کنن بهتر بتونن نظر بدن و هم جنبه آموزشی داشته باشه.
موفق و موید باشی

bachebahal_1363
سه شنبه 11 اسفند 1388, 16:17 عصر
خوب اون آیکن بغلش رو کلیک کردید؟
در ضمن در مورد کد شرمندم چون واسه شرکت نوشتم اینجا فقط جهت استفاده قرار دادم.
آموزش رو اگر بخواین می تونین Microsoft Ajax رو دانلود کنید و Clanedar اون رو یه نگاه بندازین
پروژه Ajax کاملا open Source هست

asp2.net
سه شنبه 11 اسفند 1388, 16:40 عصر
كامپوننت بسيار جالبي هستش تشكر ميكنم از شما . اگه بخواهيم دو تاريخ را با هم جمع كنم و يا كم كنيم بصورتيكه بما بگويد چند سال و چند ماه چند روز چگونه هستش بفرض بخواهيم 01/07/1352 را از تاريخ 11/12/1388 را كم كنيم به چه صورت هست؟

iman_ad
سه شنبه 11 اسفند 1388, 16:41 عصر
به نظر من وقتت تلف کردی مشکل تاریخ فارس خیلی وقت حل شده از کافی با کلک persiancalender، register کنی

saghari
سه شنبه 11 اسفند 1388, 16:48 عصر
بله دوست عزیز هم Required را True کردم و روی آیکن هم کلیک میکنم فقط Postback میشه.
بهتره لطف کنید یه Sample براش بزارید.
در این مورد هم که فرمودید برای شرکت نوشتید. اگر منظورتون این است که میخواهید از کد شما در جایی استفاده نشه که خود قاعدتا dll اون رو هم نباید میذاشتید.
مد نظر داشته باشید که گذاشتن کد به بررسی بهتر کد شما و امکان ارائه نظر و پیشنهاد در خصوص بهینه کردن اون کمک میکنه.
موفق باشید

saghari
سه شنبه 11 اسفند 1388, 16:50 عصر
بله دوست عزیز هم Required را True کردم و روی آیکن هم کلیک میکنم فقط Postback میشه.
بهتره لطف کنید یه Sample براش بزارید.
در این مورد هم که فرمودید برای شرکت نوشتید. اگر منظورتون این است که میخواهید از کد شما در جایی استفاده نشه که خود قاعدتا dll اون رو هم نباید میذاشتید.
مد نظر داشته باشید که گذاشتن کد به بررسی بهتر کد شما و امکان ارائه نظر و پیشنهاد در خصوص بهینه کردن اون کمک میکنه.
موفق باشید

bachebahal_1363
سه شنبه 11 اسفند 1388, 16:58 عصر
--------------------------------------------------------------------------------
كامپوننت بسيار جالبي هستش تشكر ميكنم از شما . اگه بخواهيم دو تاريخ را با هم جمع كنم و يا كم كنيم بصورتيكه بما بگويد چند سال و چند ماه چند روز چگونه هستش بفرض بخواهيم 01/07/1352 را از تاريخ 11/12/1388 را كم كنيم به چه صورت هست؟

خوب اگر در SQL بخواهید این کار رو انجام بدید اول باید تاریخ شمسی رو به میلادی تبدیل کنید و با استفاده از تابع DateDiff این کار رو انجام بدهید
در C#‎‎ هم باز باید تاریخ رو به میلادی تبدیل و از توابع DateTime استفاده نمائید


به نظر من وقتت تلف کردی مشکل تاریخ فارس خیلی وقت حل شده از کافی با کلک persiancalender، register کنی

خوب اگر وقت تلف کردن بود کمپوننت های بینهایت زیادی برای تاریخ میلادی وجو داشت پس چرا Microsoft این کنترل رو نوشته ؟


بله دوست عزیز هم Required را True کردم و روی آیکن هم کلیک میکنم فقط Postback میشه.
بهتره لطف کنید یه Sample براش بزارید.
در این مورد هم که فرمودید برای شرکت نوشتید. اگر منظورتون این است که میخواهید از کد شما در جایی استفاده نشه که خود قاعدتا dll اون رو هم نباید میذاشتید.
مد نظر داشته باشید که گذاشتن کد به بررسی بهتر کد شما و امکان ارائه نظر و پیشنهاد در خصوص بهینه کردن اون کمک میکنه.
موفق باشید

یه Sample به لیست پیوست های اضافه شد به اسم CalendarSample دانلود کنید و استفاده کنید
در مورد اینکه گفتید کد من جایی استفاده نشه خوب کد من جایی استفاده نشده بلکه کمپوننتم استفاده شده در ضمن dll ، سورس نیست . البته بغیر از javascript

bachebahal_1363
سه شنبه 11 اسفند 1388, 17:08 عصر
روی آیکن هم کلیک میکنم فقط Postback میشه

در این مورد هم باید بگم که جایی برای PostBack وجود نداره و Image هم فقط یک تابعی از javascript را call می کنه.

bachebahal_1363
سه شنبه 11 اسفند 1388, 17:18 عصر
اگر امکان داره از افرادی که نظر می دهند دلیل نظراتشون رو هم بنویسن تا حداقل نظر سنجی الکی نباشه

saghari
سه شنبه 11 اسفند 1388, 18:19 عصر
دوست عزیز
از اینکه سمپل گذاشتی ممنون.
در ابتدا دیدم سنپل شما هم کار نمیکنه بعد که بررسی کردم متوجه شدم
دلیل اینکه برنامه شما اجرا نمیشد اینه که با FireFox مشکل داره ولی در IE اجرا شد.
بطور کلی ظاهرش خوبه.
مشکل زیر رو هم داره:
وقتی رو دکمه بالا سمت راست کلیک میکنی به صفحه انتخاب ماه و با کلیک بعدی به صفحه انتخاب سال میره. حالا اگه یه سال بزگتر (مثلا بزرگترین سال صفحه رو انتخاب کنی) و بعد بخواهی با دکمه های سمت چپ عکس این مراحل رو انجام بدی و به سالهای قبل برگردی صفحه سال دیگه به عقب برنمیگرده. (امیدوارم متوجه منظورم بشی اگه نه بگو تا با شکل توضیح بدم)

موفق باشی

bachebahal_1363
سه شنبه 11 اسفند 1388, 21:00 عصر
دقیقا متوجه منظورتون نشدم اگر امکان داره واضح تر بگین
مراحلش راحته فقط کافیه در برگ روزها بر روی ماه بالا بزنین وارد ماه ها می شه و بعد وارد سالها
در برگ ماه ها دکمه های چپ و راست سال رو بالا و پائین می کنند و در دکمه سالها ، سالها به صورت 10 ساله جابجا می شن.
در صفحه روزها نیز دکمه چپ و راست ماهها رو جابه جا می کنه

bachebahal_1363
چهارشنبه 12 اسفند 1388, 14:23 عصر
ماشاالله همه فقط download می کنن
یه نظری چیزی

ASKaffash
چهارشنبه 12 اسفند 1388, 15:16 عصر
سلام
سورس را Obfuscate کنید در غیر اینصورت بازیابی میشود(چون گفتی مال شرکت است) اینهم یک بخش از سورس برای اینکه مطمئن شوی سورس شما محافظت نمی شود :


public string EnglishNumToFarsi(string num)
{
char[] chArray = num.ToCharArray();
for (int i = 0; i < num.Length; i++)
{
if ((chArray[i] >= '0') && (chArray[i] <= '9'))
{
chArray[i] = (char) (chArray[i] + 'ۀ');
}
}
return new string(chArray);
}

bachebahal_1363
چهارشنبه 12 اسفند 1388, 15:52 عصر
سورس را Obfuscate کنید در غیر اینصورت بازیابی میشود(چون گفتی مال شرکت است) اینهم یک بخش از سورس برای اینکه مطمئن شوی سورس شما محافظت نمی شود :

ممنون اما زیادم حیاتی نیست

asp2.net
یک شنبه 15 فروردین 1389, 16:41 عصر
من از اين كامپوننت دارم استفاده ميكنم و از شما هم تشكر كردم.يك مشكل ديگري الان متوجه شدم اين است كه در صفحاتي كه داري Update panel هستن كار نميكند و خطا ميگره براي رفع اين كار چيكار بايد كرد؟

am 241
یک شنبه 22 فروردین 1389, 09:40 صبح
با سلام
کارتون عالی هستش فقط چون فونتش برای تاریخ فارسی هست توی جمله سلکت اس کیو ال مشکل ایجاد میکنه
آیا روشی برای حل این مشکل وجود داره؟

bachebahal_1363
پنج شنبه 23 اردیبهشت 1389, 13:38 عصر
با سلام
کارتون عالی هستش فقط چون فونتش برای تاریخ فارسی هست توی جمله سلکت اس کیو ال مشکل ایجاد میکنه
آیا روشی برای حل این مشکل وجود داره؟

خوب چون این کنترل از طرز نوشتاری کلمات داخل textbox متوجه می شه که تاریخ شمسی هست یا میلادی بهتر هست که تاریخ رو در sql چک کنید که اگر میلادی بود تابعی را فراخوانی کرده و اعداد را به میلادی و اگر شمسی بود اعداد رو به شمسی تبدیل کنه بعد داخل textbox نمایش بدهید

bachebahal_1363
پنج شنبه 23 اردیبهشت 1389, 13:39 عصر
من از اين كامپوننت دارم استفاده ميكنم و از شما هم تشكر كردم.يك مشكل ديگري الان متوجه شدم اين است كه در صفحاتي كه داري Update panel هستن كار نميكند و خطا ميگره براي رفع اين كار چيكار بايد كرد؟

من دقیقا از همین کنترل در update panel هم استفاده کردم اما مشکلی نداره اگر امکان داره Error مربوطه رو بنویسید

asp2.net
سه شنبه 18 خرداد 1389, 16:16 عصر
مشکل دیگری که داره وقتی میخواهم توی دیتا بیس بریزم بصورت ؟؟/؟؟/؟؟؟؟ ذخیره میشه برای رفع این مشکل چه راه حلی دارید.

bachebahal_1363
سه شنبه 18 خرداد 1389, 17:28 عصر
خوب چون تاریخی که برگردانده می شه به صورت کدینگ فارسی هست شما باید اعداد رو به کدینگ انگلیسی تبدیل کنید البته با collation Arabic_CI_AS مشکلی نداره
معمولا هم از این collation استفاده می شود

از کد زیر استفاده کنید
public static string FarsiNumToEnglish(string num)
{
char[] s = num.ToCharArray();
for (int i = 0; i < num.Length; i++)
{
if ((s[i] >= 1776) && (s[i] <= 1785))
{
s[i] = (char)(s[i] - 1728);
}
}
return new string(s);
}

asp2.net
چهارشنبه 19 خرداد 1389, 12:04 عصر
به اطلاع عزیزان میرساند من یافتم هرکه خواست میتونم راهنمایی کنم

si6arp
چهارشنبه 19 خرداد 1389, 15:37 عصر
خوب چون تاریخی که برگردانده می شه به صورت کدینگ فارسی هست شما باید اعداد رو به کدینگ انگلیسی تبدیل کنید البته با collation Arabic_CI_AS مشکلی نداره
معمولا هم از این collation استفاده می شود

از کد زیر استفاده کنید
public static string FarsiNumToEnglish(string num)
{
char[] s = num.ToCharArray();
for (int i = 0; i < num.Length; i++)
{
if ((s[i] >= 1776) && (s[i] <= 1785))
{
s[i] = (char)(s[i] - 1728);
}
}
return new string(s);
}


ممنون از راهنمایی . ولی راهی هست که همین کار رو انجام بده ولی برعکس !؟
یعنی اعداد انگلیسی را به اعداد فارسی تبدیل کنه ؟
ممنون میشم من رو راهنمایی کنید !:ناراحت:

bachebahal_1363
پنج شنبه 20 خرداد 1389, 14:54 عصر
بله از متد زیر استفاده کنید


public static string EnglishNumToFarsi(string num)
{
char[] s = num.ToCharArray();
for (int i=0; i<num.Length; i++)
{
if ((s[i]>=48) && (s[i]<=57))
{
s[i]=(char)(s[i]+1728);
}
}

return new string(s);
}

aserfg
پنج شنبه 20 خرداد 1389, 19:00 عصر
آقا دمت گرم ولی اگه قرار باشه فقط با اینترنت اکسپلورر کار کنه خیلی جالب نیست .

bachebahal_1363
یک شنبه 23 خرداد 1389, 12:07 عصر
به زودي ورژن جديد رو مي زام كه با همه browser ها مشكل نداشته باشه و به راحتي بتونين در همه آنها استفاده كنيد

nafasak
شنبه 29 خرداد 1389, 10:17 صبح
سلام،

خیلی عالیه،

فقط یه مشکل، وقتی تاریخ میلادی رو انتخاب میکنم در این قسمت


makeEnglishNum: function(s) {
var s2 = "";
s = s.toString();
for (i = 0; i < s.length; i++) {
c = s.charCodeAt(i);
if ((c >= 1776) && (c <= 1785)) {
c = c - 1728;
}
s2 += String.fromCharCode(c);
}
return s2;
},


در خط دوم که bold شده از S ایراد میگیره('undefined')
Microsoft JScript runtime error: 'undefined' is null or not an object

و بعد از اون حتی وقی تاریخ شمسی انتخاب میکنم هم به هنگام بازیابی پیغام مجاز نبودن تاریخ رو میده....

si6arp
پنج شنبه 02 تیر 1390, 02:09 صبح
آقا پس این وبرژن جدیده چی شد ؟
که قرار بود با تمامی بروزر ها کارکنه !؟