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

كيف يمكن عمل Calendar بهذا الشكل وطريقة جلب البيانات ؟

بدأه FUNCTION في 19 مارس 2008 · 14 رد · 2,002 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

اللهم صلي على محمد وآل محمد ...

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

السالفة ومافيها كيف اسوي Calendar بهذا الشكل .. وجلب البيانات فيه .. الكلاندر هذا مصمم تصميم على مااظن بس ابي اعرف الفكرة كيف يتم احتساب هذا الشيء ..

وباختصار هذا كلاندر فيه الايام الي فيها وقت مشروع معين .. يعني مثلا انا عطيت شخص مشروع يسويه وقلت له ابتدي فيه في تاريخ مثلا 1/11/2008

في الكلاندر في الشهر 11 وفي اليوم 1 راح يظهر لنا اسم المشروع ..

شوفوا الصورة هذي

778365-998.gif

وهذا مثال حي تقدر تشوفه

http://www.aceproject.com/demo/server01/Tab.asp?Tab=2

واذا طلع لك login ادخل على الـ Demo

ثم توجه إلى Calendar

ثم اختار .. مونثلي .. عشان تشوف العرض كامل وطريقة البرنامج ...

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

تحياتي لكم

#2

قم بالتقاط الحدث DayRender الخاص بالعنصر calendar ثم اربط عنصر BulletedList مع السجلات الخاصة بالمشاريع التي تارخها يساوي تاريخ اليوم المعين.الحدث DayRender يوفر خاصية هي e.Day ويمكن استخدامها لفلترة بيانات المشاريع من الجدول :

 <asp:Calendar ID="Calendar1" runat="server" Height="485px" OnDayRender="Calendar1_DayRender"
			Width="1014px"></asp:Calendar>

		<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:DubaiEngineeringConnectionString %>"
			SelectCommand="SELECT [Name], [Date] FROM [Projects]"></asp:SqlDataSource>

 DataView dv;
	protected void Page_Load(object sender, EventArgs e)
	{

		 dv = (DataView)SqlDataSource1.Select(new DataSourceSelectArguments());

	}


	protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
	{
		dv.RowFilter = "Date='" + e.Day.Date.ToString()+"'";
			if(dv.Table.Rows.Count>0)
			{
				BulletedList bl = new BulletedList();
				bl.DataTextField = "Name";
				bl.DataValueField = "Name";
				bl.DataSource = dv;
				bl.DataBind();
				e.Cell.Controls.Add(bl);
			}
	}

كما ترى تم الاستعلام باستخدام الSqlDataSource ثم داخل الحدث DayRender ,نقوم بفلترة البيانات اعتمادا على تاريخ اليوم الذي يقوم النظام برسمه.

#3
<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
	<title>Untitled Page</title>
</head>
<body >
	<form id="form1" runat="server">
	<div>
<asp:Calendar id="Calendar" Runat="Server"
  Style="float:left; margin-right:15px"
  VisibleDate="1/1/2005"
  ShowGridLines="True"
  CellPadding="3"
  TitleStyle-BackColor="DodgerBlue"
  TitleStyle-ForeColor="White"
  TitleStyle-Font-Name="Arial"
  TitleStyle-Font-Bold="True"
  NextPrevStyle-ForeColor="White"
  DayHeaderStyle-BackColor="DodgerBlue"
  DayHeaderStyle-ForeColor="White"
  DayHeaderStyle-Font-Name="Arial"
  DayHeaderStyle-Font-Size="8pt"
  OtherMonthDayStyle-BackColor="White"
  OtherMonthDayStyle-ForeColor="White"
  DayStyle-HorizontalAlign="Right"
  TodayDayStyle-BackColor="SkyBlue"
  WeekendDayStyle-ForeColor="Red"
  SelectedDayStyle-BackColor="LightGray"
  SelectedDayStyle-ForeColor="Black"

Height="519px" Width="600px" OnDayRender="Render_Day"
>
	<SelectedDayStyle BackColor="LightGray" ForeColor="Black" />
	<TodayDayStyle BackColor="SkyBlue" />
	<DayStyle HorizontalAlign="Right" />
	<WeekendDayStyle ForeColor="Red" />
	<OtherMonthDayStyle BackColor="White" ForeColor="White" />
	<NextPrevStyle ForeColor="White" />
	<DayHeaderStyle BackColor="DodgerBlue" Font-Names="Arial" Font-Size="8pt" ForeColor="White" />
	<TitleStyle BackColor="DodgerBlue" Font-Bold="True" Font-Names="Arial" ForeColor="White" />
</asp:Calendar>
		<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:DatabaseConnectionString %>"
			SelectCommand="SELECT * FROM [Events] ORDER BY [E_Date], [E_Title]">
		</asp:SqlDataSource>
		   
	</div>
	</form>
</body>
</html>

using System;
using System.Data;
using System.Configuration;
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;
using System.Collections;
using System.Data.SqlClient;
public partial class _Default : System.Web.UI.Page
{
	protected void Page_Load(object sender, EventArgs e)
	{
		Calendar.DataBind();
		ArrayList DateArray = new ArrayList();
		ArrayList TitleArray = new ArrayList();
		ArrayList EventArray = new ArrayList();
		string str = SqlDataSource1.ConnectionString;
		DataView dv = (DataView)SqlDataSource1.Select(new DataSourceSelectArguments());

		DataTableReader DBReader = dv.Table.CreateDataReader();
		if (DBReader.HasRows)
		{
			while (DBReader.Read())
			{
				DateArray.Add(DBReader["E_Date"]);
				TitleArray.Add(DBReader["E_Title"]);
				EventArray.Add(DBReader["E_Event"]);
			}
		}
		DBReader.Close();

		ViewState["DateArray"] = DateArray;
		ViewState["TitleArray"] = TitleArray;
		ViewState["EventArray"] = EventArray;

	}
	protected void Render_Day(object sender, DayRenderEventArgs e)
	{
		e.Day.IsSelectable = False;

		e.Cell.Style["height"] = "50px";
		e.Cell.Style["width"] = "80px";
		e.Cell.Style["vertical-align"] = "top";

		ArrayList DateArray = (ArrayList)ViewState["DateArray"];
		ArrayList TitleArray = (ArrayList)ViewState["TitleArray"];
		ArrayList EventArray = (ArrayList)ViewState["EventArray"];
		BulletedList bl = new BulletedList();

		for (int i = 0; i < DateArray.Count; i++)
		{
			if ((e.Day.Date == ((DateTime)DateArray)))
			{
				ListItem item = new ListItem(TitleArray.ToString(), EventArray.ToString());
				item.Attributes.Add("onclick", "java script:alert('" + EventArray.ToString() + @"');");
				item.Attributes.Add("Style", "cursor: hand; text-decoration: underline");
				bl.Items.Add(item);
				e.Day.IsSelectable = true;
			}
		}
		e.Cell.Controls.Add(bl);

	}
}

post-127137-1205931790_thumb.jpg

Calender.zip

تم تعديل هذه المشاركة بواسطة محمد سماقية في 19 مارس 2008 في 19:56

1

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





 

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

Mohammad Sonaiea
 

#4

:wub:

بسم الله الرحمن الرحيم .

اللهم صلي على محمد وآل محمد ...

الأخ الفاضل madani ردك كان جميل وواضح .. واروع والف شكر لك على هذا التعاون الرائع ..

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

فعلا فرجت همي والله

#5

:wub: :wub:

بسم الله الرحمن الرحيم

اللهم صلي على محمد وآل محمد ...

الاستاذ الفاضل : محمد سماقية .. تحيه طيبة وبعد ,,

بصراحة ماقصرت كفيت ووفيت والله .. والله انك فعلا فرحتني بهذا المثال الرائع والواضح فعلا فعلا فعلا .. وهذا هو المطلوب حقاً ..

الله يعطيك من علم الكتاب .. فعلا ناس محترمه وناس عليها عقول رائعه .. اشكرك من كل قلبي كلامتي والله تعجز عن الرد .. واعرف انه كلاماتي لا توفي حقك ..

انت تدري انك خدمتني ... كثير لانه هذا الشيء احتاجه في شغلي .. وبصراحة كنت متوهق ماني عارف شلون اسويها .. ولكن دام معي اهل العلم اكيد راح اتعلم منهم ومن خبراتهم ..

اشكرك ... والله يوفقك دنيا وآخره ..

انا ما راح اكون طماع كثير .. ولكن لدي سؤالي .. فأتمنى احصل على جواب منك لانه طريقة كودك رائعه ..

السؤال الاول ممكن شرح للكود عشان اعرف انا استخدمه ...

السؤال الثاني وابيك تكمل خيرك كامل .. الا وهو كيف اسوي كلاندر الثاني الي هو الـ Weekly View وهذي صورة له ..

778505-997.gif

كيف طريقته وكيف فكرته انه يعرض فقط للاسبوع ... لمشاهدة مثال حي .. تفضل هنا

http://www.aceproject.com/demo/server01/Tab.asp?Tab=2

اذا طلب منك login ادخل على demo

ثم توجهه إلى Calendar

ثم إلى Weekly View

وبس وماابي الا هذا واكون في هالحالة مرتاح وأضفت إلى معلوماتي خبرات من الخبراء .. وراح تبقون في القلب والدعاء لكم بظهر الغيب ..

فأتمنى التعاون في هذه المسالة وجزاكم الله الف خيرا ..

انا انتظر الرد على أحر من الجمر .. لانه هذا آخر شيء لدي ..

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

#6

تحياتي للاخ سماقية, مثاله كان مفصل اكثر و بالصور :clapping:

#7

ربما تجدر الاشارة انه اذا كنا نريد حفظ البيانات في الViewState فالافضل ارجاع سجلات الشهر المعروض على الcalendar فقط اي Calendar.VisibleDate عوض ارجاع كل السجلات خاصة اذا كان عدد السجلات كبير:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:DubaiEngineeringConnectionString %>"
			SelectCommand="SELECT [Name], [Date] FROM [Projects] Where month(Date)=@Month And Year(Date)=@Year" OnSelecting="SqlDataSource1_Selecting">
			<SelectParameters>
				<asp:Parameter Name="Month" />
				<asp:Parameter Name="Year" />
			</SelectParameters>
		</asp:SqlDataSource>

DataView dv;
	protected void Page_Load(object sender, EventArgs e)
	{

		if (!IsPostBack)
			BindCalendar();

	}
	void BindCalendar()
	{
		dv = (DataView)SqlDataSource1.Select(new DataSourceSelectArguments());
		ViewState["dt"] = dv.Table;
	}

	protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
	{
		dv = ((DataTable)ViewState["dt"]).DefaultView;
		dv.RowFilter = "Date='" + e.Day.Date.ToString() + "'";
		if (dv.Table.Rows.Count > 0)
		{
			BulletedList bl = new BulletedList();
			bl.DataTextField = "Name";
			bl.DataValueField = "Name";
			bl.DataSource = dv;
			bl.DataBind();
			e.Cell.Controls.Add(bl);
		}

	}

	protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
	{
		e.Command.Parameters["@Month"].Value = Calendar1.VisibleDate == DateTime.MinValue ? DateTime.Today.Month : Calendar1.VisibleDate.Month;
		e.Command.Parameters["@Year"].Value = Calendar1.VisibleDate == DateTime.MinValue ? DateTime.Today.Year : Calendar1.VisibleDate.Year;
	}
	protected void Calendar1_VisibleMonthChanged(object sender, MonthChangedEventArgs e)
	{
		BindCalendar();
	}
#8

انا اسف نسيت وضع الداتا بيس بالمرفق السابق ولقد قمت بالتعديل واضافة الداتا بيس ........

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





 

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

Mohammad Sonaiea
 

#9

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

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
	<title>Untitled Page</title>
</head>
<body >
	<form id="form1" runat="server">
	<div>
<asp:Calendar id="Calendar" Runat="Server"
  Style="float:left; margin-right:15px"
  VisibleDate="1/1/2005"
  ShowGridLines="True"
  CellPadding="3"
  TitleStyle-BackColor="DodgerBlue"
  TitleStyle-ForeColor="White"
  TitleStyle-Font-Name="Arial"
  TitleStyle-Font-Bold="True"
  NextPrevStyle-ForeColor="White"
  DayHeaderStyle-BackColor="DodgerBlue"
  DayHeaderStyle-ForeColor="White"
  DayHeaderStyle-Font-Name="Arial"
  DayHeaderStyle-Font-Size="8pt"
  OtherMonthDayStyle-BackColor="White"
  OtherMonthDayStyle-ForeColor="White"
  DayStyle-HorizontalAlign="Right"
  TodayDayStyle-BackColor="SkyBlue"
  WeekendDayStyle-ForeColor="Red"
  SelectedDayStyle-BackColor="LightGray"
  SelectedDayStyle-ForeColor="Black"

Height="519px" Width="600px" OnDayRender="Render_Day" OnVisibleMonthChanged="Calendar_VisibleMonthChanged"
>
	<SelectedDayStyle BackColor="LightGray" ForeColor="Black" />
	<TodayDayStyle BackColor="SkyBlue" />
	<DayStyle HorizontalAlign="Right" />
	<WeekendDayStyle ForeColor="Red" />
	<OtherMonthDayStyle BackColor="White" ForeColor="White" />
	<NextPrevStyle ForeColor="White" />
	<DayHeaderStyle BackColor="DodgerBlue" Font-Names="Arial" Font-Size="8pt" ForeColor="White" />
	<TitleStyle BackColor="DodgerBlue" Font-Bold="True" Font-Names="Arial" ForeColor="White" />
</asp:Calendar>
		<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:DatabaseConnectionString %>"
			SelectCommand="SELECT * FROM [Events] Where month(E_Date)=@Month And Year(E_Date)=@Year ORDER BY [E_Date], [E_Title]" OnSelecting="SqlDataSource1_Selecting">
			<SelectParameters>
				<asp:Parameter Name="Month" />
				<asp:Parameter Name="Year" />
			</SelectParameters>
		</asp:SqlDataSource>
		   
	</div>
	</form>
</body>
</html>

using System;
using System.Data;
using System.Configuration;
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;
using System.Collections;
using System.Data.SqlClient;
/// <summary>
///Eng.Mohammad Suamkiea
/// mbatman_1983@hotmail.com
/// </summary>
public partial class _Default : System.Web.UI.Page
{
	protected void Page_Load(object sender, EventArgs e)
	{
		if (!IsPostBack)
		{
			BindCalendar();
		}
	}
	protected void Render_Day(object sender, DayRenderEventArgs e)
	{
		e.Day.IsSelectable = false;
		e.Cell.Style["height"] = "50px";
		e.Cell.Style["width"] = "80px";
		e.Cell.Style["vertical-align"] = "top";

		ArrayList DateArray = (ArrayList)ViewState["DateArray"];
		ArrayList TitleArray = (ArrayList)ViewState["TitleArray"];
		ArrayList EventArray = (ArrayList)ViewState["EventArray"];
		BulletedList bl = new BulletedList();

		for (int i = 0; i < DateArray.Count; i++)
		{
			if ((e.Day.Date == ((DateTime)DateArray)))
			{
				ListItem item = new ListItem(TitleArray.ToString(), EventArray.ToString());
				item.Attributes.Add("onclick", "java script:alert('" + EventArray.ToString() + @"');");
				item.Attributes.Add("Style", "cursor: hand; text-decoration: underline");
				bl.Items.Add(item);
				e.Day.IsSelectable = true;
			}
		}
		e.Cell.Controls.Add(bl);

	}
	protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
	{
		e.Command.Parameters["@Month"].Value = Calendar.VisibleDate == DateTime.MinValue ? DateTime.Today.Month : Calendar.VisibleDate.Month;
		e.Command.Parameters["@Year"].Value = Calendar.VisibleDate == DateTime.MinValue ? DateTime.Today.Year : Calendar.VisibleDate.Year;

	}
	protected void BindCalendar()
	{
		Calendar.DataBind();
		ArrayList DateArray = new ArrayList();
		ArrayList TitleArray = new ArrayList();
		ArrayList EventArray = new ArrayList();
		string str = SqlDataSource1.ConnectionString;
		DataView dv = (DataView)SqlDataSource1.Select(new DataSourceSelectArguments());
		DataTableReader DBReader = dv.Table.CreateDataReader();
		if (DBReader.HasRows)
		{
			while (DBReader.Read())
			{
				DateArray.Add(DBReader["E_Date"]);
				TitleArray.Add(DBReader["E_Title"]);
				EventArray.Add(DBReader["E_Event"]);
			}
		}
		DBReader.Close();

		ViewState["DateArray"] = DateArray;
		ViewState["TitleArray"] = TitleArray;
		ViewState["EventArray"] = EventArray;
	}

	protected void Calendar_VisibleMonthChanged(object sender, MonthChangedEventArgs e)
	{
		BindCalendar();
	}
}

وبالنسبة للطلب الثاني للأخ FUNCATION هذا الطلب سوف لن يعتمد على اداة الـCalendar الموجودة ضمن الـasp.net ولذلك سوف يحتاج الى بنية هيكلية خاصة وهي ليست صعبة ,اي يحتاج الى وقت لذلك إن شاء الله بأقرب وقت......

وبالنسبة للشرح اخي الكود واضح وبسيط انت فقط حاول ان تقرائه اذا كان لديك اي مشكلة بأي سطر بالكود ممكن ان نناقشه هنا ..... :rolleyes:

Calender.zip

تم تعديل هذه المشاركة بواسطة محمد سماقية في 19 مارس 2008 في 20:41

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





 

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

Mohammad Sonaiea
 

#10

بسم الله الرحمن الرحيم

اللهم صلي على محمد وآل محمد ...

اخي العزيز madani بارك الله فيك في الدنيا والآخره .. :wub: ماقصرت ورايتك بيضه .. الله ينفع بك المؤمنين . ويعطيك كل ماتتمناه وشكرا على الملاحظات الرائعه والتقنية ..

يعجز لساني عن كلمه شكر ... من لم يشكر المخلوقين لم يشكر الخالق .. ..... شكرا لله ..

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

استاذي الفاضل العزيزي محمد سماقية .. الله يعطيك الصحة والعافية .. والله منحرج منك.. على هذا الكرم الزائد منك .. :wub:

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

وفي المثال الثاني بعد كذلك نزلته الان وبصراحة فعلا رائع وجميل .. بارك الله فيك ...

انا انتظر منك الرد على السؤال الثاني ... فاتمنى اجد الاجابة منك او اخينا الفاضل madani

اما بالنسبة للكود انا قبل مااسأل راح اقراه زين .. وحاليا انا منهمك فعلا .. لانه كان علي اليوم يوم شاق جدا ..

بارك الله فيك .. واحسنت رحم الله والديك ..

#11

بسم الله الرحمن الرحيم

للرفع ياخبراء ..

#13

يا اخوان شكرا لكم ولكن انا مبتدىء واريد ان اضع تعديل لبرنامجكم بين برامج امتلكها واقوم بتعديلها لمراعاة عملي الان جميع البرامج لها classاي dataaccess كيف اعمل برنامجكم واضعه في الداتا اكسس واعمل له storerd procedure ارجومساعدتي فأنا في ورطه حقيقية وشكرا

#14

يا شباب ارجو مساعدتي انا انتظر ارجوكم ساعدوني ...............................................................................

عمل ال calndar السابقه على اساس :

1.stored procedure

2.dataacess class

waitingggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg

#15

اين الخبراء انني انتظر تحويل ال calendar أعلاه الى

1.stored procedure

2.class

اين انتم حاولوا مساعدتي تعبت من الانتظار ........................................................................................................

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

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

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

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

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