الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف اجعل صيغة dateTimePicker متوافقه مع صيغ التاريخ فى جميع الأجهزة

بدأه حامد محمد الوصيف في 17 أكتوبر 2012 · 15 رد · 1,923 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله

كان يواجهنى مشاكل كتير فى dateTimePicker حيث ان عند تنفيذ البرنامج بيكون الصيغة اللى فى البرنامج غير صيغة التاريخ للجهاز

بمعنى ان خانة اليوم بيكون مقابلها فى الجهاز خانة الشهر فكان يظهر لى خطأ

أنا ممكن اتحكم فى جهازى بحيث اجعل الصيغه واحده ولكن لااستطيع التحكم فى اجهزة الاخرين

فماذا يكون الحل

أرجوا الافاده جزاكم الله خيرا

13598125002.gif

038c8ecfa8.gif

#2

استخدمي هاد الكود

DateTime resultd = dateTimePicker2.Value.Date;
            label2.Text = resultd.ToShortDateString();
#3

السلام عليكم ...

ضع الخصائص التالية (من نافذة الخصائص أو من الكود) :

 DateTimePicker1.Format = DateTimePickerFormat.Custom
    	DateTimePicker1.CustomFormat = "dd / MM /yyyy"
1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#4
 CultureInfo culture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
            culture.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";
            culture.DateTimeFormat.LongTimePattern = "";
            Thread.CurrentThread.CurrentCulture = culture;

في التعريف العام

المهندس

#5

ياريت حل للموضوع جزاكم الله خير

 

ولو الاكواد دى هى الحل فاين اضعها

13598125002.gif

038c8ecfa8.gif

#6

السلام عليكم ورحمة الله وبركاته

أعتقد أنك تريد عمل نافذة بها خانة تاريخ وتريد أن يكون تنسيق التاريخ يوم/ شهر/ سنة مهما كانت الإعدادات عند جهاز المستخدم

إذا كان ذلك كذلك فمعظم الأخوة قاموا بالرد الصحيح

 

ولنأخذ أسهل الحلول الخاص بالأخ حسام الشامى وتكتب السطرين فى وظيفة البناء Constructor الخاص بالنافذة لديك

 

أو يمكنك تغيير خصائص DateTimePicker

 

تجعل خاصية Format  تساوى Custom

 

وتجعل خاصية CustomFormat تساوى dd/MM/yyyy ولاحظ حرف M كبير

تم تعديل هذه المشاركة بواسطة ema2000_t في 15 أكتوبر 2013 في 01:33

أدعو الله أن يجعل أعمالنا خالصة لوجهه الكريم --- وأن ينفعنا بما علمنا

Dr Sayed Tohamy

Programming Instructor

مدرب برمجة

---------------

EmaSoft2000

-------------------

#7
ema2000_t كتب:

السلام عليكم ورحمة الله وبركاته

أعتقد أنك تريد عمل نافذة بها خانة تاريخ وتريد أن يكون تنسيق التاريخ يوم/ شهر/ سنة مهما كانت الإعدادات عند جهاز المستخدم

إذا كان ذلك كذلك فمعظم الأخوة قاموا بالرد الصحيح

 

ولنأخذ أسهل الحلول الخاص بالأخ حسام الشامى وتكتب السطرين فى وظيفة البناء Constructor الخاص بالنافذة لديك

 

أو يمكنك تغيير خصائص DateTimePicker

 

تجعل خاصية Format  تساوى Custom

 

وتجعل خاصية CustomFormat تساوى dd/MM/yyyy ولاحظ حرف M كبير

 

السلام عليكم لقد فعلت نفس الكلام بالضبط ولكن عند تنفيذ البرنامج يظهر لى نفس المشكلة يوجد صورة فى المرفقات للتوضيح

 

ملاحظة هامة : انا عندى حقل فى الداتا بيز اسمة Date ومختار له نوع datetime 

 

وعند تنفيذ البرنامج ياتى لى خطأ ان التاريخ خارج المدى كما فى الصورة التى بالمرفقات

 

 

فما الحل جزاكم الله كل خير

post-133160-0-52658400-1381791216.jpg

13598125002.gif

038c8ecfa8.gif

#8

طيب من خصائص DateTimePicker  قم بعمل هذه الخصائص في وضع التصميم الخاص بالفيجوال استديو

اقتباس

 

أو يمكنك تغيير خصائص DateTimePicker

 

تجعل خاصية Format  تساوى Custom

 

وتجعل خاصية CustomFormat تساوى dd/MM/yyyy ولاحظ حرف M كبير

أنا جربتها وبعدة حالات ولا حالة اعطتني المشكلة التي قمت بها

تأكد من وضع تاريخ مقبول

||***************************************************||


 ||بسم الله الذي لا يعلو على اسمه شيء في الارض ولا في السماء وهو العلي العظيم ||


||***************************************************||


 ||                             اللهم إن لم يكن بك غضب علي فلا ابالي                       ||


||***************************************************||


في المنتديات العلمية استخدام التقييم rep_up.png  rep_down.png  يرفع من قيمة الموضوع واهمية الرد

#9
حامد محمد الوصيف كتب:

السلام عليكم لقد فعلت نفس الكلام بالضبط ولكن عند تنفيذ البرنامج يظهر لى نفس المشكلة يوجد صورة فى المرفقات للتوضيح

 

ملاحظة هامة : انا عندى حقل فى الداتا بيز اسمة Date ومختار له نوع datetime 

 

وعند تنفيذ البرنامج ياتى لى خطأ ان التاريخ خارج المدى كما فى الصورة التى بالمرفقات

 

 

فما الحل جزاكم الله كل خير

 

وعليكم السلام ورحمة الله وبركاته

مشكلة حفظ التاريخ فى السيكوال مشكلة شهيرة ومعروفة، وحلها سهل جدا جداً بإذن الله

المشكلة تكمن فى أن السيكوال يقوم بتخزين التاريخ بصيغته الافتراضية التى هى شهر يوم سنة وبالتالى عندما تريد تخزين قيمة تاريخ سواء بأمر insert or update يجب أن تكون الصيغة متشابهة، وبناء عليه فإن الأمر الذى ترسله للسيكوال باستخدام ADO.NET يجب أن يذهب بصيغة شهر يوم سنة فيجب عليك تعديل صغير فى الأمر

SqlCommand cmd = new SQlCommand();
cmd.CommandText = "insert into table1 values ('" + TextBox1.Text + "', '" + DateTimePicker1.Value.ToString("MM/dd/yyyy") + "')";

المثال السابق مثال تشبيهى لاستخدام أداة التاريخ وكما واضح أنك يجب تحويل التاريخ إلى نص ولكن بصيغة شهر يوم سنة

 

ملحوظة: الخطأ الذى ظهر عندك ربما لا يظهر فى بعض التواريخ التى يكون اليوم فيها أصغر من 12، مثل 3/5/2013 تلاحظ هنا أن اليوم أصغر من 12 فإذا أرسلت التاريخ السابق فلن يعطيك خطأ، ولكنها كارثة كبيرة لأنه سيخزن التاريخ ويبدل ما بين الخمسة والثلاثة فبدل أن يكون 3 مايو 2013، سيكون 5 مارس 2013 وهذا خطأ منطقى شهير

 

لذلك يجب عليك إرسال الأوامر إلى السيكوال على هيئة شهر يوم سنة بغض النظر عن تنسيق التاريخ على النافذة عندك أو إعدادات الجهاز، يجب عليك الالتزام بالصيغة الموضحة أعلاه

 

أرجو أن يكون هذا قصدك وأن يكون هذا حلاً للمشكلة

دعائى للجميع بالتوفيق

تم تعديل هذه المشاركة بواسطة ema2000_t في 15 أكتوبر 2013 في 03:54

أدعو الله أن يجعل أعمالنا خالصة لوجهه الكريم --- وأن ينفعنا بما علمنا

Dr Sayed Tohamy

Programming Instructor

مدرب برمجة

---------------

EmaSoft2000

-------------------

#10
ema2000_t كتب:

وعليكم السلام ورحمة الله وبركاته

مشكلة حفظ التاريخ فى السيكوال مشكلة شهيرة ومعروفة، وحلها سهل جدا جداً بإذن الله

المشكلة تكمن فى أن السيكوال يقوم بتخزين التاريخ بصيغته الافتراضية التى هى شهر يوم سنة وبالتالى عندما تريد تخزين قيمة تاريخ سواء بأمر insert or update يجب أن تكون الصيغة متشابهة، وبناء عليه فإن الأمر الذى ترسله للسيكوال باستخدام ADO.NET يجب أن يذهب بصيغة شهر يوم سنة فيجب عليك تعديل صغير فى الأمر

SqlCommand cmd = new SQlCommand();
cmd.CommandText = "insert into table1 values ('" + TextBox1.Text + "', '" + DateTimePicker1.Value.ToString("MM/dd/yyyy") + "')";

المثال السابق مثال تشبيهى لاستخدام أداة التاريخ وكما واضح أنك يجب تحويل التاريخ إلى نص ولكن بصيغة شهر يوم سنة

 

ملحوظة: الخطأ الذى ظهر عندك ربما لا يظهر فى بعض التواريخ التى يكون اليوم فيها أصغر من 12، مثل 3/5/2013 تلاحظ هنا أن اليوم أصغر من 12 فإذا أرسلت التاريخ السابق فلن يعطيك خطأ، ولكنها كارثة كبيرة لأنه سيخزن التاريخ ويبدل ما بين الخمسة والثلاثة فبدل أن يكون 3 مايو 2013، سيكون 5 مارس 2013 وهذا خطأ منطقى شهير

 

لذلك يجب عليك إرسال الأوامر إلى السيكوال على هيئة شهر يوم سنة بغض النظر عن تنسيق التاريخ على النافذة عندك أو إعدادات الجهاز، يجب عليك الالتزام بالصيغة الموضحة أعلاه

 

أرجو أن يكون هذا قصدك وأن يكون هذا حلاً للمشكلة

دعائى للجميع بالتوفيق

 

شكرا جزيلا فعلا هذه هى المشكلة بالضبط

 

وقمت بتعديل بعض الأكواد فى المشروع وظبطت الحمد لله وسوف اقوم بتعديل باقى الاكواد ان شاء الله

 

وشكرا لجميع الاخوة اللى شاركوا معى الموضوع 

13598125002.gif

038c8ecfa8.gif

#11

الحل الاخير يعمل لكن يعتبر خطأ شائع لأنه عرضة للاختراق Sql Injection وثانيا لا يعمل في جميع الحالات خصوصا حالة ان تكون قاعدة البيانات على سيرفر والبرنامج على جهاز (شبكة) وبالتالي يجب فهم المشكلة نظريا أولا

 

الخطا المذكور هو بسبب تحديد الحد الأدنى للتاريخ في قاعدة البيانات لذلك لا تستخدم DateTime.Min لأنها تحت المجال المسموح وفي حال لم تعطي لحقل التاريخ قيمة فقيمته الافتراضية هي Min غير المسموحة

 

الأمر الثاني يجب مراعاة خيارات اللغة على الجهاز لأن قاعدة البيانات ستعتبر التاريخ من نفس صيغة وندوز وكذلك الأمر للتطبيق لذلك في حال كان التطبيق وقاعدة البيانات على نفس الجهاز فالخيارات الافتراضية ستعمل

#12
ramyhhh كتب:

الحل الاخير يعمل لكن يعتبر خطأ شائع لأنه عرضة للاختراق Sql Injection وثانيا لا يعمل في جميع الحالات خصوصا حالة ان تكون قاعدة البيانات على سيرفر والبرنامج على جهاز (شبكة) وبالتالي يجب فهم المشكلة نظريا أولا

 

الخطا المذكور هو بسبب تحديد الحد الأدنى للتاريخ في قاعدة البيانات لذلك لا تستخدم DateTime.Min لأنها تحت المجال المسموح وفي حال لم تعطي لحقل التاريخ قيمة فقيمته الافتراضية هي Min غير المسموحة

 

الأمر الثاني يجب مراعاة خيارات اللغة على الجهاز لأن قاعدة البيانات ستعتبر التاريخ من نفس صيغة وندوز وكذلك الأمر للتطبيق لذلك في حال كان التطبيق وقاعدة البيانات على نفس الجهاز فالخيارات الافتراضية ستعمل

 

شكرا للإضافة ولكن ما هو حل المشكلة من وجهة نظرك

 

وهل الحل الاخير مكن يسبب لى مشاكل فيما بعد

 

منتظر الرد

13598125002.gif

038c8ecfa8.gif

#13

طبعا الحل الأخير لا يعتبر خاطئا وبالنسبة لعملك لن تحتاج أكثر منه لكونك تستخدم الصيغة النظامية أي DateTime 

الأخ رامي ذكر موضوع ثغرة أمنية تحل عن طريق الإجراءات المخزنة Stored Procedures لذلك في حال لم يكن هناك مشاكل ادخال لديك فيمكنك المتابعة

||***************************************************||


 ||بسم الله الذي لا يعلو على اسمه شيء في الارض ولا في السماء وهو العلي العظيم ||


||***************************************************||


 ||                             اللهم إن لم يكن بك غضب علي فلا ابالي                       ||


||***************************************************||


في المنتديات العلمية استخدام التقييم rep_up.png  rep_down.png  يرفع من قيمة الموضوع واهمية الرد

#14

طيب ماهو الحل الانسب اتمنى شرح مثال بسيط

#15

اطلع في دروس الأستاذ خالد السعداني على الاجراءات المخزنة من الدرس 90-94

||***************************************************||


 ||بسم الله الذي لا يعلو على اسمه شيء في الارض ولا في السماء وهو العلي العظيم ||


||***************************************************||


 ||                             اللهم إن لم يكن بك غضب علي فلا ابالي                       ||


||***************************************************||


في المنتديات العلمية استخدام التقييم rep_up.png  rep_down.png  يرفع من قيمة الموضوع واهمية الرد

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…