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

التعامل مع أداة Calendar

مغلق
بدأه محمد خليل أبو صلاح في 11 فبراير 2008 · 8 رد · 1,699 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

بعد مشاغل عديدة (لا تطاق) عدنا للمنتدى الحبيب

خجلت من العودة خالي اليدين ففكرت بشيء أعود به .. :) أتمنى ان تفيد البعض على الاقل

انا انسان عملي .. يعني خلونا نجي من الاخر ..

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

أن هناك عميل يحتاج لعمل برنامج لنفرض لعمل حجوزات لقاعة إجتماعات ..

التفاصيل:

دعونا قبلا نتفق على ان يكون التطبيق أبسط مما يريد المدير بهدف ابراز الفكرة فقط ...

صفحة تقوم بعرض Calendar و عند الضغط على تاريخ معين نرى Form لادخال بيانات الحجز ..

تخزن البيانات في قاعدة البيانات ..

عند عودة موظف الحجوزات لل Calendar يجد أن التواريخ "الملطخة بالدماء" يعني اللون الاحمر هي محجوزة وبالتالي لا يعود لحجزها لعميل اخر

متطلب اخر و أخير .. يريد مدير قاعة الإجتماعات أن يرى في صفحة واحدة 12 Calendar .. عارفين لشو؟ اكيد كنتيجة للسنة .. كل واحدة منها تمثل شهر من شهور السنة و بها التواريخ المحجوزة باللون الأحمر

كيف نقوم بذلك ؟؟؟

هناك طريقتين في نظري ..

أن نستخدم كلاس يتورث صفات الكلاس الاساسي في الدوت نت Calendar و سنتورط في موضوع تعاقب الأحداث و نحتاج لعمل Delegate وووو صداع يعني

و في طريقة بسيطة أخرى بعمل Method من نوع Calendar تقوم بإنشاء كائنات و عرضها في الصفحة.. سنستخدمها و من يتقنها و يريد أن يطور المشروع يمكنه العودة للفكرة الاولى و ليتحمل العواقب :)

هل أحد عنده فكرة أخرى ؟؟

انا كتبت مجموعة أكواد لكن احتاج لبعض الوقت لكتابتها على شكل مقال مشروح ..

سأعود قريبا جدا

تم تعديل هذه المشاركة بواسطة محمد خليل أبو صلاح في 13 فبراير 2008 في 09:36

You can fly while you can touch the sky

#2

قمت بإرفاق بداية التطبيق و الرجاء مراعاة التالي:

- تعديل ملف Web.Config حيث أضفت key لل ConnectionString

- قاعدة البيانات مرفقة بالأسفل على شكل SQL Script و انا استخدمت Dev كإسم مستخدم .. يمكنك استخدامه او استخدام SA او ان تعتمد على ال Trusted Connection

- قمت باستخدام كلاس DataBase وانصحكم بالإستفادة منه حتى يختصر عليكم الوقت :)

- قمت بعمل صفحة Master و تركتها سادة .. على كيفك التصميم

- صممت صفحة Default.aspx لتكون بداية التطبيق و بها فقط فكرة عرض النتيجة مع عرض الايام المحجوزة و قابلية عمل حجوزات جديدة

البقية تأتي :)

ReservationsSystem.zip

You can fly while you can touch the sky

#3

فكرة جداً جميلة ودائماً أفكارك مميزة, صراحة لوطلب مني مثل هذا العمل ممكن بعمل 12 كنترول (calender)في الصفحة

#4

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

بداية :-

حمد لله بالسلامة وربنا يعينك على مشاغلك :) ....

ثانيا :-

اقتباس
فكرة جداً جميلة ودائماً أفكارك مميزة


مطور مواقع وتطبيقات الانترنت 


PHP

CodeIgniter , jQuery,AJAX ,CSS Coder

مطور تطبيقات الايفون والاندرويد

مدونتي الخاصة

#5

شيء رائع والتطبيق في الحال

نموت وتحيا ...................فلسطين .

#6

السلام عليكم

ما شاء الله فكرة جيدة أخي خليل

و لكن اذا أردت ان يتم البرنامج يجب أن يضاف عليه بعض التعديلات مثل

حجز التاريخ للاكثر من شخص و لكن مع مراعاة عدد الاماكن كحد أقصى (عدد الاماكن = 5 و المحجوزة = 3 و المتبقية = 2) وذلك كله لنفس اليوم

و بارك الله فيك على هذه المشاركة و الافادة

و الله في عون العبد ما دام العبد في عون أخيه

#7

مجددا عدت لكم مع بقية الفكرة :)

اولا سأنسخ الكود كما هو ثم أشرح جزئيات معينة اتفقنا؟ اعتقد نعم

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class Admin_Default : System.Web.UI.Page
{
	private Calendar CreateCalendar(string ID)
	{
		Calendar mCalendar = new Calendar();
		mCalendar.ID = ID;
		string selectedDay = "1/" + (int.Parse(ID) + 1).ToString() + "/2008".ToString();
		mCalendar.TodaysDate = DateTime.Parse(selectedDay);
		mCalendar.ShowNextPrevMonth = false;
		mCalendar.DayRender += new DayRenderEventHandler(mCalendar_DayRender);
		return mCalendar;
	}

	void mCalendar_DayRender(object sender, DayRenderEventArgs e)
	{
		// Type your code here to paint the booked dates in RED as shown in Default.aspx :)
		// Mohammed Khalil
	}


	protected void Page_Load(object sender, EventArgs e)
	{
		for (int i = 0; i < 12; i++)
		{
			phCalendars.Controls.Add(CreateCalendar((i).ToString()));
		}
	}
}

الكود مرفق على فكرة - نسخة 1.1

الان سأتي للشرح ..

اضفت صفحة ال Admin و من خلالها يمكن ان يرى calender لكل شهور السنة (اتمنى ان لا يعلق احد و يقول اين ال Security) انا هنا اطرح فكرة فقط

اهم شيء كما قلت في البداية .. سأقوم بعمل Method من نوع Calendar تقوم بإعادة كنترول من نوع Calendar.

كيف سأعرض هذا الكنترول؟؟

بسيطة .. هناك أداة جميلة و لا اعلم لم الكثير لا يستخدمها .. وظيفتها ان تعرض الادوات بداخلها و تسمى PlaceHolder

لنتحدث على الهامش ...

بعضنا يعلم "المفروض الجميع يعلم" ان هناك أدوات يتم توليدها في مرحلة ال Runtime و هناك حالة تكون الاداة غير موجودة في الذاكرة و لكن نحتاج وجودها فمثلا لو اردنا ان نقوم عند قيام المستخدم بعمل وظيفة معينة ان يظهر له زر يقوم بوظيفة اخرى .. كلنا يعلم ان الزر Button من اهم ما فيه هو الحدث OnClick

طيب انا ما بعرف اذا رح استخدم الزر و كم زر بحتاج وووووووو و كل زر اكيد له حدث فكيف سأعرف؟؟

هل لو توقعت ان التطبيق يعرض 20 زر كحد اقصى . . اقوم بعمل 20 زر و اجعل خاصية visible = false ؟

طبعا لا ..

يمكننا من خلال الكود تعريف الكنترول و إضافة الأحداث له و من ثم عرض هذه الأدوات بعد ان إمتلأت بالجمل الدسمة

تماما قمت بعمل نفس الفكرة هنا:

private Calendar CreateCalendar(string ID)
	{
		Calendar mCalendar = new Calendar();
		mCalendar.ID = ID;
		string selectedDay = "1/" + (int.Parse(ID) + 1).ToString() + "/2008".ToString();
		mCalendar.TodaysDate = DateTime.Parse(selectedDay);
		mCalendar.ShowNextPrevMonth = false;
		mCalendar.DayRender += new DayRenderEventHandler(mCalendar_DayRender);
		return mCalendar;
	}

طبعا نحتاج لإضافة ID للكنترول

لكن لل Calendar خصائص أخرى تتناسب مع طبيعتها و بالأغلب خصائص و طرق تتعلق بالتواريخ والايام والشهور و السنوات

انا كنت ذكيا في التعامل مع هذه الطريقة بحيث أمرر كل مرة رقم مختلف

كلنا يعلم انه لو اردنا عرض اول يوم من الشهور سيكون كالتالي:

1/1/2008

1/2/2008

1/3/2008

الخ الخ الخ

هناك اشياء متشابهة و شيء واحد مختلف .. الشهر

قمت بالاسفل في الحدث Load بعمل دورة تمرر الرقم ابتداءا من الصفر و حتى 12 يعني 11 اخر رقم و تستقبله ال Method Calendar و تجعله ال ID له ثم تجعله هو الشهر الإبتدائي لل Calendar و ذلك طبعا بعد إضافة رقم صحيح له .. لان اول رقم سيمرر هو صفر و اخرها 11 و لا يوجد شهر صفر و لكن في شهر 1 و هو يناير "شهر مولدي :) ) و اخر شهر 12

العملية بدأت تتضح صح؟

جميل

قمت أيضا بحجب خاصية التنقل بين الشهور ..

الان نأتي لموضوع الاحداث .. اذهبوا لاول صفحة برمجتها Default.aspx

ستجدون أنني استخدمت الحدث DayRender من اجل تحديد الايام الحمراء اي المحجوزة .. احتاج لعمل مثلها .. كل ما علي هو إضافة السطر التالي:

  mCalendar.DayRender += new DayRenderEventHandler(mCalendar_DayRender);

وبالتالي عند تكوين ال Calendar في الذاكرة سوف يتم إسناد حدث خاص بها لوحدها فقط..

نقوم بعمل شبيه بما كتبته في الصفحة الاولى ليجعل كل شهر يعرض الايام المحجوزة فيه ..

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

اتمنى ان تكونوا استفدتم و لو قليلا .. اعتقد ان كاثي اعجبتها الفكرة

بالتوفيق لكم جميعا..

ReservationsSystem.zip

You can fly while you can touch the sky

#8

تذكرت شيئا .. يمكنك ان تستخدموه كتمرين ..

1- يريد المدير لاحقا ان يعرض نتيجة كل السنة كما فعلنا مؤخرا ولكن اعتمادا على مجال من السنوات .. يعني مش بس 2008

2- تطور النظام و اصبحت هناك عدة قاعات و يريد المدير ان يعرض معلومات كل قاعة من ناحية الحجوزات كلا على حدة/حدا (نسيت العربي) اعتقد حدة

3- المدير المزاجي لا يعجبه عرض النتيجة بشكل عمودي و يريد ان تظهر ال Calenders على شكل صفين او 3 حتى تكون الطف او حتى يسهل رؤيتها جميعا..

هل احد عنده فكرة؟

سأجيب فقط صح او غلط .. (يعني ما بدي أحل الواجب .. الغش حرام) :)

You can fly while you can touch the sky

#9
اقتباس
اعتقد ان كاثي اعجبتها الفكرة

أكيد طبعاً,,, ودائماً بستفيد منها في عمل هذة الأفكار أو أفكار مشابها

.

.

.

بالتوفيق

هذا الموضوع مغلق.

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