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

إضافة عناصر أثناء تشغيل البرنامج

مغلق
بدأه Adel Khayata في 2 فبراير 2005 · 11 رد · 1,013 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

أنا لدي عنصر Panel في صفحة في مشروعي و أنا أضيف مجموعة متغيرة من العناصر إلى هذا العنصر برمجياً.

سؤالي هو : ماذا يحدث لهذه العناصر عندما يحدث PostBack في الصفحة ؟ هل علي أن أضيف هذه العناصر إلى ال Controls الخاصة بال Panel أم أن ال Panel يحتفظ بها حتى لو حدث PostBak ؟

جزاكم الله خيراً.

#2

نعم يحتفظ بالعناصر اذا كانت EnableViewState تساوي True (و هو الوضع القياسي) .

#3

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

شكراً أخي لردك.

أنا جربت هذه الحالة ( أن تكون EnableViewState مساوية ل True ) و لكن العناصر المحتواة ضمن ال Panel لا تظهر بعد حدوث PostBack !!! حتى أن الخاصية : Panel.Controls.Count ( و هو عدد العناصر المحتواة ضمن ال Panel ) كانت تعطيني القيمة 0 في ال Page_Load للصفحة عند حدوث PostBack أي أنه لا يحتوي على عناصر !!!

فماهو تفسير مايحدث ؟

#5

ان الامر لا علاقة له ب EnableViewState . فهذا هو التصرف الطبيعي للبانل وأي كنترول أخر كال datagrid او اي شي تقريبا . ما تضيفه الى ال Controls لا يبق بعد postback

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

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

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

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

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

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

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

#6

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

أنا حاولت أن أخزن قيم متحولات العناصر التي يتم اضافتها إلى ال Panel و أقوم بإعادة إضافة هذه العناصر إلى ال Panel عند حدوث PostBack و بحيث يأخذ كل عنصر القيمة التي كان عليها قبل ال PostBack .... و هي تعمل بشكل صحيح ... و لكن .... العناصر التي اضيفها إلى ال Panel هي DropDownList و بعد حدوث ال PostBack أكتشف أن هذه العناصر تقوم بتفعيل الحدث : SelectedIndexChanged لقيمة سابقة تم اختيارها وتغير هذا الاختيار حتى قبل حدوث ال PostBack ... أي كأن ال DropDwonList يحتفظ بتاريخ الاختيارات التي تمت عليه مع أنني أقوم بإنشاء عنصر DropDownList جديد بعد كل PostBack.

فمالذي يقوم بتفعيل الحدث SelectedIndexChanged لعنصر DropDownList الذي تمت ازالته فعلياً من الذاكرة بسبب ال PostBack و خلو ال Panel من العناصر ؟

تم تعديل هذه المشاركة بواسطة Adel Khayata في 3 فبراير 2005 في 17:41

#7
Adel Khayata كتب:
.... العناصر التي اضيفها إلى ال Panel هي DropDownList و بعد حدوث ال PostBack أكتشف أن هذه العناصر تقوم بتفعيل الحدث : SelectedIndexChanged لقيمة سابقة تم اختيارها وتغير هذا الاختيار حتى قبل حدوث ال PostBack ...

ان هذا هو تصرف أي DropDownList عندما تكون الخاصية AutoPostBack false

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

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

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

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

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

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

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

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

#8

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

طيب كيف ممكن ألغي هذه المشكلة ؟

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

و طبعاً يجب أن تكون AutoPostBack مساوية ل true.

#9
اقتباس
طيب كيف ممكن ألغي هذه المشكلة ؟

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

و طبعاً يجب أن تكون AutoPostBack مساوية ل true.

كلامك غير واضح نوعا ما.هل تريد الحصول على القيمة الجديدة للDropDownList ام لا ؟.اذا كنت تود الحصول على القيمة الجديدة فالمطلوب ان تضيف العناصر الى الصفحة دائما ,اي بغض النظر عن IsPostBack لان الذي يحصل عند تغير قيمة ال DropDownList هو ان الصفحة ترسل الID الخاص بالقائمة الى السيرفر لكي يقوم السيرفر بالبحث عن القائمة (اي الDropDownList ) في مجموعة عناصر الصفحة مستعملا ال ID ,فاذا وجد القائمة قام بتشغيل ال Event Handler الخاص بها (وهو في هذه الحالة SelectedIndexChanged) اما اذا لم يجدها فانه لا يحدث اي شيء.

#10

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

أخي انا برنامجي يضيف و يزيل عناصر DropDownList من ال Panel ( في الحقيقة انا استخدمها من أجل ادخال قيم لفلترة معلومات الصفحة ) و بالتالي من الممكن أن يكون ال Panel في أحد اللحظات يحتوي على 6 عناصر و في لحظة أخرى على 3 عناصر ...

المشكلة تحدث كالتالي :

عندما يكون لدي 6 عناصر يكون ال ID لهذه العناصر هو : Id1, Id2 ....,Id6 .... ولكن المستخدم يمكن أن يزيل العنصر الثالث Id3 فعندما يحدث ال PostBack ... أنا أعيد إضافة العناصر كالتالي : Id1,Id2,Id3,Id4,Id5 و كما تلاحظ فإن العنصر الرابع يصبح في مكان العنصر الثالث و سيكون له نفس ال Id للعنصر الثالث القديم ... و بالتالي فإن السيرفر يعتقد و كأن العنصر الثالث القديم مازال موجوداً و ينفذ الحدث SelectedIndexChanged على أساس أن العنصر الثالث القديم هو الذي تسبب به.

أتمنى أن أكون قد أوضحت المشكلة.

شكراً لتعاونكم.

#11

اخي من المهم ان تعطي ID محدد لكل عنصر لان هذا مهم في مسار الاحداث.مثلا:

DropDownList CourseDDL = new DropDownList();
CourseDDL .ID = "CourseDDL ";

DropDownList TeacherDDL = new DropDownList();
TeacherDDL.ID = "TeacherDDL";

بهذا ,الصفحة لا يمكن ان تخطيء في البحث عن العنصر لانها تعرف الID الخاص بالكنترول الذي احدث ال PostBack مهما تغير موقع الكنترول في الصفحة.

تم تعديل هذه المشاركة بواسطة madani في 5 فبراير 2005 في 14:49

#12

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

بعد وضع RadioButtonList في Panel1 وتحميله بالبيانات اريد ان اعرف كيف احصل علي اختيار المستخدم عند النقر علي زر الحفظ من غير تعديل في القيم المختاره ممكن الكود يكون دوت نت ليس جافا

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

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