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

مشكلة في Datalist وحلقة التكرار For ؟

بدأه ubd17 في 16 يونيو 2008 · 10 رد · 1,078 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

عامل DataList وربطتها بـ SqlDataSource ، والهدف منها عرض صور ،

الصور مخزنه في مجلد ، واسم الصورة في مخزن في DataBase ،

المشكلة في عرض الصور آخر صورة ما تظهر لأنه في الأساس حلقة التكرار ما توصل لآخر حقل ،

هذا الكود :

	Protected Sub dlPrd_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataListItemEventArgs) Handles dlPrd.ItemDataBound
		Dim Image1 As New Image
		Dim lbl As New Label
		Dim i, counter As Integer
		Dim zoom As New HyperLink


		counter = dlPrd.Items.Count()
		For i = 0 To counter - 1
			lbl = dlPrd.Items(i).FindControl("Label1")

			Image1 = dlPrd.Items(i).FindControl("prdImg")
			Image1.ImageUrl = "~/Prd_Img/" + lbl.Text.ToString + ""

			zoom = dlPrd.Items(i).FindControl("HyperLink1")
			zoom.NavigateUrl = "~/Prd_Img/" + lbl.Text.ToString + ""

		Next

	End Sub

تابعتها بالـBreakPoint :

فظهر كأنه يزداد العداد واحد ثم يصفر ثم يزداد على مقبله ثم يصفر وهكذا ..

أول مرة : counter =0 ،مايدخل حلقة التكرار ، بعدها ينتقل إلى صفحة source ، ويصفر counter ،

بعدها : counter =1 ،يدخل حلقة التكرار ، بعدها ينتقل إلى صفحة source ،

بعدها : counter =2 ،يدخل حلقة التكرار ، بعدها ينتقل إلى صفحة source ،

إلى قبل آخر حقل ،

فما هو الحل ،

أو هل الحدث المستخدم ItemDataBound مناسب ؟ مع العلم استخدمت كذلك ItemCreated ونفس المشكلة ؟

أو هل Item هو المعرف للحقل في DataList ؟ كما Rows في GridView ؟؟

موفقين لكل خير

تم تعديل هذه المشاركة بواسطة ubd17 في 16 يونيو 2008 في 13:25

#2

اتساءل هل هناك ضرورة لإستخدام For من الأساس

The World Must Be Crazy

#3

أهلا بك ،،

اقتباس
اتساءل هل هناك ضرورة لإستخدام For من الأساس

أكيد ،،

لأنه مثل ما ذكرت بأن الصور في مجلد و أسماء الصور في DataBase ،،

على هالأساس لأزم أربط كل صورة بالباث ، بهذا الكود :

 Image1 = dlPrd.Items(i).FindControl("prdImg")
			Image1.ImageUrl = "~/Prd_Img/" + lbl.Text.ToString + ""

موفق لكل خير ،،

#4

وفي المرفقات تجدوا المثال :

post-43101-1213614943_thumb.jpg

#6

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

System Down :

اقتباس
هل جربت في الحدث prerender؟

إيه والله :) ،،

جربتها وظبطت 100/100 ،،

يسلموا ،،

بس عزيزي فيك تشرح المشكلة وين ؟ ومعنى الحدث prerender ؟

مشكور عزيزي ،،

موفق ..

#7

حدث prerender يحدث قبل رسم الكونترول مباشرة. لذا ستكون متأكداً 100% من أن جميع البيانات التي تم ربطها به قد ظهرت. و هو تقريباً أفضل مكان لتعديل مظهر الكونترول حسب البيانات المرتبطة.

#8

شكرا على التوضيح

يبدو ان الصورة لم تتضح عندي

لماذا لا تعمل Binding مباشرة

<ItemTemplate>
			   <img alt="<%# Eval("image")%>" height="100" src='<%# Eval("image", "http://site.com/upload/{0}") %>'
					width="100" />
			</ItemTemplate>

من هنا جاء سؤالي

The World Must Be Crazy

#9

انا هنا لدي عدة ملاحظات

1- بالنسبة لملاحظة الاخ newbie هي صحيحة وهي احسن طريقة بالنسبة لمشكلة الاخ ubd17

2-بالنسبة للحدث ItemDataBound اخي ubd17 انت لم تستخدمه بشكل صحيح والنسبة للكود السابق الذي وضعته في الاول هو سوف يتم استدعائه بالنسبة لكل عنصر "item" داخل DataList يعني بمعنى آخر بكل مرة ولكل item بالـdatalist سوف تنفذ الحلقة السابقة !!!!!!!!!! اذا ماالفائدة من الحدث ItemDataBound ؟؟؟؟؟

اخي بشكل عام الحدث ItemDataBound ينفذ لكل item من datalist وبعد الـbound وقبل render للعنصر لذلك نحن نستطيع ان تستخدم الحدث ItemDataBound وبدون استخدام الحلقة ان نصل لكل عنصر من datalist وبلحظة التنفيذ وكيفية الوصول للـitem يوجد للحدث datalist برامتر وهو e من نمط System.Web.UI.WebControls.DataListItemEventArgs وهذا الـobject يحوي على كائن اسمو item من نوع DataListItem وهو يعبر عن العنصر الحالي للـDataList وعن طريق هذا الكأئن ان استطيع ان اعمل تعديل او اي شي ....... وحتماً الخطأ سوف بظهر لديك والسبب انك بكل مرة تنفذ الحلقة اي عند الوصول للعنصر الاخير من الـDataList سوف تتم تغير جميع القيم وهنا وسوف تحدث مشكلة عند الـbinding

ولدي ملاحظة بالنسبة للحدث ItemCreated هو تقريباً نفس الحدث ItemDataBound ولكن هنا ضمن هذا الحدث لا يمكن ان نعمل تعديل على العنصر والسبب ان العنصر قد تم انشاءه ....

على كل حال اخ ubd17 اذا لديك مشكلة بالملاحظات السابقة ممكن ان نناقشها بشكل اوسع

1

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





 

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

Mohammad Sonaiea
 

#10

صحيح اخي محمد سماقية

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

The World Must Be Crazy

#11
اقتباس
اللهم إلا إذا كان هناك امر لا أنا ولا انت نعلمه

الله اعلم

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





 

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

Mohammad Sonaiea
 

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