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

الوصول إلى CheckBox في Repeater داخلRepeater

مغلق
بدأه نبيل المشفي في 21 يونيو 2007 · 3 رد · 469 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

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

لا أريد الاطالة نبدأ على بركة الله في آخر ماتوصلت له من محاولات حول ماعنون به هذا الدرس

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

سيكون لدينا :

جدول لشركات السيارات اسمه cartype يحتوي على حقلين هما cartypeID و cartypeName

وجدول للسيارات اسمه carmodel يحتوي على ثلاثة حقول وهي carmodelID و carmodelName و carmodel_cartypeID

من الحلول المثلى لعملية العرض استخدام Gridview داخل Repeater مع Data View لفلترة السيارات تحت الشركات التابعة لها ورغبة في الاختصار وبعدا عن التكرار فطريقة العرض هذه مشروحة من قبل الأستاذ محمد خليل أبو صلاح تحت عنوان التعامل مع Data View مع مثال مشابه على هذا الرابط

/index.ph...129&t=50776

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

في طريقة العرض التي سوف أقوم بها سأستخدم Repeater داخل Repeater

في الـ Repeater الأول سنقوم بعرض الشركات

وفي الـ Repeater الثاني سنقوم بعرض السيارات التابعة لكل شركة وسيكون الكود كالتالي

 
<%@ Page Language="VB" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
	Dim constring As String = ConfigurationSettings.AppSettings("ConnectionString")
	Dim con As New SqlConnection(constring)
	Dim dap As SqlDataAdapter
	Dim dst As New DataSet
	Dim cmd As New SqlCommand
	Dim StrSql As String
	Dim dv As DataView
	Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)

		StrSql = "select * from cartype"
		con.Open()
		dap = New SqlDataAdapter(StrSql, con)
		dap.SelectCommand = New SqlClient.SqlCommand(StrSql, con)
		dap.Fill(dst, "cartype")
		con.Close()
		StrSql = "select * from carmodel"
		con.Open()
		dap = New SqlDataAdapter(StrSql, con)
		dap.SelectCommand = New SqlClient.SqlCommand(StrSql, con)
		dap.Fill(dst, "carmodel")
		con.Close()
		dv = dst.Tables("carmodel").DefaultView
		If Not Page.IsPostBack Then
			Me.cartype.DataSource = dst.Tables("cartype")
			Me.DataBind()
		End If
	End Sub
	Function GetCarModel(ByVal cartypeID As Integer) As DataView
		dv.RowFilter = "carmodel_cartypeID=" & cartypeID
		Return dv
	End Function
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
	<title>Untitled Page</title>
</head>
<body>
	<form id="form1" runat="server">
	<div>
	<asp:Repeater ID="cartype"  runat="server">
	<ItemTemplate>
	<table><tr><td>
	<%#Eval("cartypeName")%>
	<br />
   <asp:Repeater id="carmodel" runat="server"
	DataSource='<%#GetCarModel(Eval("cartypeID"))%>'>
   <ItemTemplate>
   <asp:CheckBox ID=CheckBoxModel runat=server Text=' <%#Eval("carmodelName")%>' />
	</ItemTemplate>
	</asp:Repeater>
	</td></tr></table>
	</ItemTemplate>
   </asp:Repeater>
	</div>
	</form>
</body>
</html>

وطريقة العرض ستظهر كما في الصورة

http://upload.9q9q.net/image/gIDeb8EID/cars2.bmp.html

مايهمنا الآن في هذا الدرس هو الشعور باختيار أي CheckBox يحتوي على سيارة معروضة ومن الوهلة الأولى يتضح أننا بحاجة إلى حلقتي For لتفي بالغرض

حيث تكون الحلقة الأولى لـصفوف Repeater المسمى cartype والحلقة الثانية لـصفوف Repeater المسمى carmodel

ومن خلالها نقوم باختبار CheckBox واحدا تلو الآخر ..

نقوم بانشاء Button ونضع خلفه الحلقة الأولى

Dim i As Integer
For i = 0 To cartype.Items.Count - 1
Next

وداخل الحلقة نقوم بتعريف متغير من نوع صف Repeater للمرور على جميع صفوف Repeater المسمى cartype من خلال الحلقة كمايلي

  
Dim i As Integer
For i = 0 To cartype.Items.Count - 1
Dim cartypeItem As RepeaterItem = cartype.Items(i)
Next

الآن عند محاولة انشاء الحلقة الثانية التابعة لـ Repeater الثاني والمسمى carmodel على نفس النهج سنلاحظ وجود خطأ والسبب

هو عدم الشعور بوجود هذا الـ Repeater داخل الـ Repeater الأول والمسمى cartype

ومما ينبغى ملاحظته هو أن هناك Repeater كامل والمسمى carmodel لكل صف من الـ Repeater الأول المسمى cartype

ولذلك نقوم بتعريف متغير من نوع Repeater لكل صف من الـ Repeater الأول لنتمكن من الوصول إلى الـ Repeater الثاني كما يلي

Dim i As Integer
For i = 0 To cartype.Items.Count - 1
Dim cartypeItem As RepeaterItem = cartype.Items(i)
Dim carmodel As Repeater = cartypeItem.FindControl("carmodel")
Next

الآن نستطيع انشاء الحلقة الثانية على نفس نهج الحلقة الأولى ولكن من خلال المتغير carmodel كما يلي

 
dim x,i as integer
For i = 0 To cartype.Items.Count - 1
Dim cartypeItem As RepeaterItem = cartype.Items(i)
Dim carmodel As Repeater = cartypeItem.FindControl("carmodel")
For x = 0 To carmodel.Items.Count - 1
Dim carmodelItem As RepeaterItem = carmodel.Items(x)
Next
Next

نقوم الآن بتعريف متغير من نوع Boolean ونضع فيه القيمة True في حال تم اختيار الـ CheckBox الذي وصل عليه العد في الحلقة و False لو كان العكس

 
dim x,i as integer
For i = 0 To cartype.Items.Count - 1
Dim cartypeItem As RepeaterItem = cartype.Items(i)
Dim carmodel As Repeater = cartypeItem.FindControl("carmodel")
For x = 0 To carmodel.Items.Count - 1
Dim carmodelItem As RepeaterItem = carmodel.Items(x)
Dim isChecked As Boolean = CType(carmodelItem.FindControl("CheckBoxModel"),CheckBox).Checked
Next
Next

ثم نقوم بفحص المتغير قيمة isChecked لاتخاذ اجراء معين من خلال IF الشرطية كالتالي

 
dim x,i as integer
			   For i = 0 To cartype.Items.Count - 1
Dim cartypeItem As RepeaterItem = cartype.Items(i)
Dim carmodel As Repeater = cartypeItem.FindControl("carmodel")

For x = 0 To carmodel.Items.Count - 1
				Dim carmodelItem As RepeaterItem = carmodel.Items(x)
  Dim isChecked As Boolean = CType(carmodelItem.FindControl("CheckBoxModel"), CheckBox).Checked
If isChecked Then

				End If
						   Next
		Next

لنفرض أننا نريد طباعة أسماء السيارات المختارة داخل Label نضيف السطرين التاليين لأخذ الـ Text من CheckBox وطباعتها في الـ Label

Dim i, x As Integer
		For i = 0 To cartype.Items.Count - 1
			Dim cartypeItem As RepeaterItem = cartype.Items(i)
			Dim carmodel As Repeater = cartypeItem.FindControl("carmodel")
			For x = 0 To carmodel.Items.Count - 1
				Dim carmodelItem As RepeaterItem = carmodel.Items(x)
				Dim isChecked As Boolean = CType(carmodelItem.FindControl("CheckBoxModel"), CheckBox).Checked
				If isChecked Then
					Dim isCheckedText As String = CType(carmodelItem.FindControl("CheckBoxModel"), CheckBox).Text
					Label1.Text = Label1.Text + CStr(isCheckedText) + " "
				End If
			Next
		Next

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

أعطر التحايا ..

أخوكم

نبيل المشفي

تم تعديل هذه المشاركة بواسطة نبيل المشفي في 21 يونيو 2007 في 05:21

#2

يا سيدي ألف شكر عالموضوع الحلو

موضوع مفيد جدا

بارك الله فيك

#3

:) شكرا لك أخي نبيل .. حتى انا استفدت من الدرس ..

ننتظر منك المزيد والمزيد

تحياتي لك

You can fly while you can touch the sky

#4

الأخوين ِArwany ومحمد خليل أبو صلاح

شكرا لكما على المتابعة والتعقيب ..

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

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