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

استخدام DatePicker لادخال قيمة التاريخ

مغلق
بدأه Ammar Gaffar في 28 ديسمبر 2004 · 14 رد · 1,988 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

استخدام DateTime Picker لادخال قيمة تاريخ

مشكلة فورمات التاريخ التي تعبت من البحث عن الحل الامثل لمعالجتها

الحل الموضح باستخدام ال ASP.NET

ملحوظة : يمكنكم استخدام هذه الاداة في أي تطبيق ولكن حجم الاداة في الفورم كبيرة وتأخذ مساحة في التصميم وهذا المثال يقوم بفتح الاداة في صفحة أخري تأخذ نفس مقاس الاداة وعند إختيار التاريخ يتم كتابته تلقائيا في ال TextBox

قم بفتح مشروع جديد وإضافة WebForm

في شفرة ال HTML قم باضافة الشفرة التالية

    <asp:textbox id="TextBox1" style="Z-INDEX: 105; LEFT: 384px; POSITION: absolute; TOP: 56px" runat="server" Width="80px"></asp:textbox><STRONG> </STRONG><STRONG>  <A href="javascript:calendar_window=window.open('calendar1.aspx?formname=Form1.TextBox1','calendar_window','width=154,height=188');calendar_window.focus()"><STRONG><IMG style="Z-INDEX: 106; LEFT: 472px; POSITION: absolute; TOP: 56px" src="button_date.gif"></STRONG></A>

الان قم باضافة نموذج آخر باسم calendar1.aspx وقم باضافة شفرة الجافا سكريبت في ال <Head>

<script runat="server">
    Private Sub Calendar1_SelectionChanged(sender As Object, e As System.EventArgs)
        Dim strjscript as string = "<script language=""javascript"">"
        strjscript = strjscript & "window.opener." & Httpcontext.Current.Request.Querystring("formname") & ".value = '" & Calendar1.SelectedDate & "';window.close();"
        strjscript = strjscript & "</script" & ">"         Literal1.text = strjscript
    End Sub
    
    Private Sub Calendar1_DayRender(sender As Object, e As System.Web.UI.WebControls.DayRenderEventArgs)
       If e.Day.Date = datetime.now().tostring("d") Then
       e.Cell.BackColor = System.Drawing.Color.LightGray
       End If
    End Sub
  </script>

تم قم باضافة الشفرة التاليه في ال <Body>

<body leftmargin="0" topmargin="0">
  <form runat="server" ID="Form1">
 	 <asp:Calendar id="Calendar1" runat="server" OnSelectionChanged="Calendar1_SelectionChanged" OnDayRender="Calendar1_dayrender"
    DayNameFormat="FirstLetter" BackColor="#FFFFCC" FirstDayOfWeek="Monday" BorderColor="#FFCC66"
    ForeColor="#663399" Height="188px" Width="154px" BorderWidth="1px" Font-Size="8pt" Font-Names="Verdana"
    ShowGridLines="True">
    <TodayDayStyle ForeColor="White" BackColor="#FFCC66"></TodayDayStyle>
    <SelectorStyle BackColor="#FFCC66"></SelectorStyle>
    <NextPrevStyle Font-Size="9pt" ForeColor="#FFFFCC"></NextPrevStyle>
    <DayHeaderStyle Height="1px" BackColor="#FFCC66"></DayHeaderStyle>
    <SelectedDayStyle Font-Bold="True" BackColor="#CCCCFF"></SelectedDayStyle>
    <TitleStyle Font-Size="9pt" Font-Bold="True" ForeColor="#FFFFCC" BackColor="#990000"></TitleStyle>
    <OtherMonthDayStyle ForeColor="#CC9966"></OtherMonthDayStyle>
 	 </asp:Calendar>
 	 <asp:Literal id="Literal1" runat="server"></asp:Literal>
  </form>
	</body>

قم بتشغيل البرنامج سيظهر ال Textbox1 وبجانبه أيقونة الصورة(لا تظهر الصوره اذا لم توجد في المسار المحدد) حتي ولو لم تظهر الصوره قم بالضغط علي ايقونة الصورة سيتم فتح الفورم وبه الاداة Calander وبعد إختيار التاريخ سيتم كتابته تلقائيا في ال Textbox1

اما الحل الثاني فباستخدام الجافا سكريبت فقط ويعمل علي ال Client Side فقط وساقوم بشرحه لاحقا

والله الموفق

تم تعديل هذه المشاركة بواسطة walcom في 29 ديسمبر 2004 في 09:30

#2

عذرا

نسيت أن ارفق الملف وموضح فيه الشرح علي مستند Word

DateTimePicker.doc

#3

مشكور يأخ عمار

سويتها وأشتغلت معاي بشكل ممتاز ،

ولكن التحدي هو كيف أستطيع وضع التاريخ الذي أختاره المستخدم داخل textbox موجود في datagrid.

:blink:

#4

للوصول للخلايا داخل ال DataGrid عن طريق حدث تستخدم التالي :

 CellIndex=e.Item.ItemIndex
 e.Item.Cells(CellInedx).Controls(controlIndex)

 واعتقد التالي بينجح
  dg.Cells(cellIndex).Controls(controlIndex)

لنفرض أن الكنترول الوحيدة هي ال TextBox بالتالي يجب ان تكون قيمة ال ControlIndex هي صفر و لو كان ترتيبها الثاني يجب ان تكون 1 و لو كانت الثالثة اكتب 2 و هكذا

يعني ترتيب الكنترول - 1

You can fly while you can touch the sky

#5
اقتباس
للوصول للخلايا داخل ال DataGrid عن طريق حدث تستخدم التالي

ما ذكرته ياأخ محمد صحيح .

ولكن بالنسبة للسكربت التالي :

="javascript:calendar_window=window.open('calendar1.aspx?formname=Form1.TextBox1','calendar_window','width=154,height=188');calendar_window.focus()"

لم أستطيع معرفة اسم مربع النص الموجود داخل الـ DataGrid للصف الذي يتم تعديله حاليا عن طريق المستخدم.

مع العلم بأنني استبدلت Form1.TextBox1 بالـ DataGrid1__ctl3_txtSDate ولكن لم يحصل أي شي.

فهل من حل آخر .

:wacko:

#6

ان الوصول لمربع النص في الصف الذي يعدل يتم عن طريق FindControl

مثلا

((TextBox) e.Item.FindControl("TextBoxName")).Text = "Hello";

تم تعديل هذه المشاركة بواسطة DotNetExpert في 14 يناير 2005 في 03:18

وحدن بيبقو متل زهر البيلسان وحدهن بيقطفو وراق الزمان

بيسكرو الغابي بيضلهن متل الشتي يدقوا على بوابي على بوابي

يا زمان يا عشب داشر فوق هالحيطان ضويت ورد الليل عكتابي

برج الحمام مسور و عالي هج الحمام بقيت لحالي لحالي

يا ناطرين التلج ما عاد بدكن ترجعو صرخ عليهن بالشتي يا ديب بلكي بيسمعو

http://www.mazikana.com/Songs/F/Fayrouz/mp...uz---Wahdon.mp3

#7

ياأخوان ما ذكرتموه صحيح إذا أردت الوصول عن طريق الـ VB ولكن أنا أريد الوصول لمربع النص عن طريق الجافا سكربت في المثال الذي ذكره الأخ عمار

<A href="javascript:calendar_window=window.open('calendar1.aspx?formname=Form1.TextBox1','calendar_window','width=154,height=188');calendar_window.focus()">

لو حاولنا نفهم الكود أعلاه ما يتم في تصوري أن المستخدم حينما يضغط على اللنك يتم تنفيذ السكربت وذلك بفتح صفحة اسمها calendar1.aspx ويقوم بتمرير اسم مربع النص form1.textbox1 المراد تعبئته بالتاريخ الذي سيختاره المستخدم ، مع العلم بأن الاسم Form1.textbox1 هو الاسم الموجود في الـ HTML Source .

لذلك وضعت اسم مربع النص الموجود في الـ HTML Source وهو كما ذكرت لكم DataGrid1__ctl3_txtSDate ولكن لم تنجح المحاولة .

أرجو الافادة

وشكرا

#8

لست متاكدا من الموضوع لكن حاول ان تجرب

((TextBox) e.Item.FindControl("TextBoxName")).ClientID

وحدن بيبقو متل زهر البيلسان وحدهن بيقطفو وراق الزمان

بيسكرو الغابي بيضلهن متل الشتي يدقوا على بوابي على بوابي

يا زمان يا عشب داشر فوق هالحيطان ضويت ورد الليل عكتابي

برج الحمام مسور و عالي هج الحمام بقيت لحالي لحالي

يا ناطرين التلج ما عاد بدكن ترجعو صرخ عليهن بالشتي يا ديب بلكي بيسمعو

http://www.mazikana.com/Songs/F/Fayrouz/mp...uz---Wahdon.mp3

#9

للأسف فشلت التجربة ! :wacko:

#10

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

وحدن بيبقو متل زهر البيلسان وحدهن بيقطفو وراق الزمان

بيسكرو الغابي بيضلهن متل الشتي يدقوا على بوابي على بوابي

يا زمان يا عشب داشر فوق هالحيطان ضويت ورد الليل عكتابي

برج الحمام مسور و عالي هج الحمام بقيت لحالي لحالي

يا ناطرين التلج ما عاد بدكن ترجعو صرخ عليهن بالشتي يا ديب بلكي بيسمعو

http://www.mazikana.com/Songs/F/Fayrouz/mp...uz---Wahdon.mp3

#11

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

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

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

<asp:DataGrid id=DataGrid1 style="Z-INDEX: 103; LEFT: 48px; POSITION: absolute; TOP: 72px" runat="server" DataSource="<%# ds %>" AutoGenerateColumns="False" DataKeyField="ID" DataMember="Dates">
	<HeaderStyle Font-Bold="True" HorizontalAlign="Center"></HeaderStyle>
	<Columns>
  <asp:BoundColumn DataField="ID" SortExpression="ID" ReadOnly="True" HeaderText="ID"></asp:BoundColumn>
  <asp:TemplateColumn HeaderText="Date">
 	 <ItemTemplate>
    <asp:Label Runat="server" Text= '<%# CType(DataBinder.Eval(Container.DataItem, "Date"),DateTime).ToString("dd.MM.yy") %>' >
    </asp:Label>
 	 </ItemTemplate>
 	 <EditItemTemplate>
    <asp:TextBox ID="EditText" Runat="server" Text='<%# CType(DataBinder.Eval(Container.DataItem, "Date"),DateTime).ToString("dd.MM.yy") %>'>
    </asp:TextBox>
 	 </EditItemTemplate>
  </asp:TemplateColumn>
  <asp:EditCommandColumn ButtonType="LinkButton" UpdateText="Save" HeaderText="Action" CancelText="Cancel"
 	 EditText="Edit"></asp:EditCommandColumn>
	</Columns>
</asp:DataGrid>

الداتا غريد بسيطة جدا تحتوي على ثلاقة عواميد الاول هو ال id والثاني هو التاريخ وهو العامود الوحيد الذي يمكن تحريره. العامود الثالث من اجل التحكم.

والآن ناتي على الجزء الأهم من الموضوع وهو اضافة اللنك الذي سيفتح صفحة ال CALEDAR1 عند الضغط عليه.

من اجل ذلك سوف استخدم الحدث DataGrid1_ItemDataBound والذي يحدث عند كل مرة يضاف فيها سطر جديد الى الداتا غرد.

بالطبع لسنا بحاجة لاضافة رز فتح الصفحة الجديد لكل سطر وانما فقط للسطر الذي يتم تحريره ولذلك نتحقق من الخاصية e.Item.ItemType ان كانت ListItemType.EditItem.

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

Dim tb As TextBox = e.Item.FindControl("EditText")

لاحظ هنا أن EditText هي نفس ال ID الذي اعطيناه لل TextBox عند تعريف ال DataGrid.

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

Dim hl As New HyperLink
hl.NavigateUrl = String.Format("javascript:calendar_window=window.open('calendar1.aspx?formname={0}','calendar_window','width=154,height=188'); calendar_window.focus()", _
tb.ClientID)
hl.Text = "Select date"

ومن ثم نقوم باضافة اللنك الجديد الى نفس الخلية الموجود بها صندوف النص

tb.Parent.Controls.Add(hl)

وهكذا سوف تعمل هذه الطريق.

لاحظ أنني بدلت السطر التالي في كود الجافا سكربت ضمن صفحة ال Calendar1

"window.opener.document.getElementById('" & Httpcontext.Current.Request.Querystring("formname") & "').value = '" & Calendar1.SelectedDate & "';window.close();"

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

لكنها لن تعمل على نتسكيب ولذلك يمكنك استخدام

If(window.opener.document.getElementById)
{
	//use
	window.opener.document.getElementById(‚theTextBox’);
}
Else
{
	//use
	window.opener.document.all[‚theTextBox’];
}

DateTimePicker.rar

وحدن بيبقو متل زهر البيلسان وحدهن بيقطفو وراق الزمان

بيسكرو الغابي بيضلهن متل الشتي يدقوا على بوابي على بوابي

يا زمان يا عشب داشر فوق هالحيطان ضويت ورد الليل عكتابي

برج الحمام مسور و عالي هج الحمام بقيت لحالي لحالي

يا ناطرين التلج ما عاد بدكن ترجعو صرخ عليهن بالشتي يا ديب بلكي بيسمعو

http://www.mazikana.com/Songs/F/Fayrouz/mp...uz---Wahdon.mp3

#12

أولا مجهود تشكر عليه أخوي إكسبرت ( إسم على مسمى ) .

ثانيا أن كنت أتصور أنه ممكن أوصل لمربع النص عن طريق الجافا أيضا لا عن طريق الـVB ، لكن المهم انه العملية تمت بنجاح .

بس عندي سؤال بسيط بالنسبة للكود التالي :

hl.NavigateUrl = String.Format("javascript:calendar_window=window.open('calendar1.aspx?formname={0}','calendar_window','width=154,height=188'); calendar_window.focus()", _
tb.ClientID)

ماالمقصود بـ

formname{0}

وهل هناك مرجع أو رابط لموقع على الانترنت أقدر أستفيد منه لتعلم javascript ؟

وأخيرا اكرر شكري لك .

#13

ان السطر

hl.NavigateUrl = String.Format("javascript:calendar_window=window.open('calendar1.aspx?formname={0}','calendar_window','width=154,height=188'); calendar_window.focus()", _
tb.ClientID)

وبكل بساطة يستبدل ال ClientID بال {0} ضمن السلسلة. أي أنه مكافئ تماما للسطر

hl.NavigateUrl ="javascript:calendar_window=window.open('calendar1.aspx?formname="  & tb.ClientID  &     " ','calendar_window','width=154,height=188'); calendar_window.focus()"

لمزيد من المعلومات عن String.Format انظر الرابط

http://msdn.microsoft.com/library/default....ormattopic1.asp

وحدن بيبقو متل زهر البيلسان وحدهن بيقطفو وراق الزمان

بيسكرو الغابي بيضلهن متل الشتي يدقوا على بوابي على بوابي

يا زمان يا عشب داشر فوق هالحيطان ضويت ورد الليل عكتابي

برج الحمام مسور و عالي هج الحمام بقيت لحالي لحالي

يا ناطرين التلج ما عاد بدكن ترجعو صرخ عليهن بالشتي يا ديب بلكي بيسمعو

http://www.mazikana.com/Songs/F/Fayrouz/mp...uz---Wahdon.mp3

#14

مشكلة بسيطة واجهتني وهي :

   CType(DataBinder.Eval(Container.DataItem, "Date"),DateTime).ToString("dd.MM.yy")

هل ممكن أحدد التاريخ الميلادي أو الهجري الخاص بالتاريخ .

#15

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

ولذلك لاقتبس لك ردا كتبته قبل حوالي العام وثلاثة اشهر على الرابط التالي

/index.ph...ndpost&p=171015

using System;
using System.Globalization;

class TryShift
{
public static void Main()
{

CultureInfo cf =new CultureInfo( "ar-SA", false );

System.Console.WriteLine(DateTime.Now.ToString(cf.DateTimeFormat) );
}
}

بالطبع تبقى خطوة صغيرة جدا من اجل تطبيق هذا الكود بالشكل المطلوب داخل الداتا غريد. ولكنني ساترك هذه الخطوة لك ;)

تحياتي

تم تعديل هذه المشاركة بواسطة DotNetExpert في 18 يناير 2005 في 02:11

وحدن بيبقو متل زهر البيلسان وحدهن بيقطفو وراق الزمان

بيسكرو الغابي بيضلهن متل الشتي يدقوا على بوابي على بوابي

يا زمان يا عشب داشر فوق هالحيطان ضويت ورد الليل عكتابي

برج الحمام مسور و عالي هج الحمام بقيت لحالي لحالي

يا ناطرين التلج ما عاد بدكن ترجعو صرخ عليهن بالشتي يا ديب بلكي بيسمعو

http://www.mazikana.com/Songs/F/Fayrouz/mp...uz---Wahdon.mp3

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

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