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

RadioButtonList in Edit FormView

مغلق
بدأه جوليا في 5 مايو 2007 · 19 رد · 2,313 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

لنفترض لدي الآتي ، كما في الصورة التالية :-

post-62586-1178365892_thumb.jpg

هذه البيانات الظاهرة في الصورة تم انشائها داخل المكون FormView،

حسنا، كما يتضح الحقل Group يتم عرضه بواسطة RadioButtonList.

المشكلة تكمن في أنني عندما أحاول عمل تحديث لحقل الـ Group و بعد ذلك اضغط على زر التحديث، ما يحدث انه بعد عملية التحديث أنه يحتفظ بالقيمة السابقة ( أي قبل عملية التعديل ).

الخطوات التي قمت باتباعها في انشاء الـ RadioButtonList ، كالتالي:

Selected Value: Group_No , using Bind

DataSourceID : GroupTabelObjectDataSource ( Cause I am using DAL And BAL Layer with SQL DB

DataTextField : Group_Name

DataValueField: Group_NO

الصورة التالية توضح العلاقة لجدوال البيانات :

post-62586-1178367090_thumb.jpg

أرجوا أن يكون الشرح مفصلا و واضحا للمشكلة التي أواجهها .

في انتظار اقتراحاتكم .

، شكرا .

جوليا

#2

معلومات مهمة :

اللغة المستخدمة : VB.Net

التقنية المستخدمة :2.0 ASP.Net

البرنامج المستخدم: Microsoft Visual Studio.Net 2005

#3

جوليا هل استخدمت Page.IsPostBack؟ انا اوجدت حل من اسبوع لعضو يعاني من نفس المشكلة تقريبا .. في المرة القادمة الرجاء ارفاق الكود

You can fly while you can touch the sky

#5

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

الأستاذ/ محمد خليل أبو صلاح

شكرا لاهتمامك بإيجاد الحل لمشكلتي ،

اجابة على سؤالك لا لم استخدم الامر :

Page.IsPostBack

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

تستطيع مراجعة الكود بنفسك عن طريق المرفق التالي:

RadioButtonList.rar

، تحياتي لك.

#6

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

العضو الكريم / firass88

اشكرك لمساهمتك في توضيح الأمر Page.IsPostBack.

، تحياتي.

#7

كل ما حدث أنك لم تستخدمي

If Not Page.IsPostBack Then
  // binding()
End If

وبالتالي في كل مرة تم عمل PostBack تم ربط الاداة من جديد و عادت للقيم البدائية

بالنسبة لي انا اكره تحميل الملفات :D يعني لو كان بس جزء من الكود مكتوب بيكون كافي و زيادة

شكرا الك كتير

You can fly while you can touch the sky

#8

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

الأستاذ الفاضل / محمد خليل أبو صلاح

في الواقع لم تجدي حلا معي ، ،

حسنا ،لقد حاولت استخدام الأمر بهذه الطريقة : -

و قد يبدو ذلك غبيا بعض الشيء....

 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
		If Not Page.IsPostBack Then
			Dim xx As RadioButtonList = FormView1.FindControl("RadioButtonList1")
			xx.DataBind()
		End If
	End Sub

الا انه يسبب حدوث استثاء ،

و حاولت استخدام الأمر بهذه الطريقة :

أي اسناد القيم يتم عن طريق كود الـ VB.Net

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
		If Not Page.IsPostBack Then
			Dim xx As RadioButtonList = FormView1.FindControl("RadioButtonList1")
			xx.DataSourceID = "ObjectDataSource2"
			xx.DataTextField = "Group_Name"
			xx.DataValueField = "Group_NO"
			xx.SelectedValue = "'<%# Bind(""Group_NO"") %>'"

		End If
	End Sub

لكن ذلك يؤدي الى عدم ظهور الـ radioButtonList وقت التنفيذ .

، فما هو رأيك بذلك ؟

، تحياتي.

تم تعديل هذه المشاركة بواسطة جوليا في 6 مايو 2007 في 16:49

#9

Really I don't know. It seems like you rebind your control again somewhere in your code's methods. am not able to find out that error and don't have VS.NET on this machine. What can you do is: Make sure that binding is happened once in that page life cycle.

Best luck

You can fly while you can touch the sky

#10
اقتباس
Really I don't know. It seems like you rebind your control again somewhere in your code's methods. am not able to find out that error and don't have VS.NET on this machine. What can you do is: Make sure that binding is happened once in that page life cycle.

Best luck

:angry:

إلى الآن لم أصل لحل ،، هل هناك من اقتراح آخر لديكم ؟؟

، تحياتي

#11

ok don't get mad Julia .. am gonna download your attachment and check it in my VS.NET .. alright?

You can fly while you can touch the sky

#12

جوليا يا جوليا .. المشكلة ما انحلت .. بتعرفي ليش؟

اولا لازم تصدقي إنو أكتر من نص ساعة بس بحاول اشغل قاعدة البيانات و أخيرا إكتشفت إني لازم استخدم port غير 80

ثانيا .. شوفي انا لاحظت إن أفكارك حلوة دايما لكن !! المصيبة طلعتي بتستخدمي ال Wizard و هاي بتساوي مصيبة .. إياك من الويزرد

يعني انا والله ما قدرت افهم أي شي من الكود فما بالك لو شخص مبتديء؟ حتى بالشركات ممنوع ال Wizard :)

ثانيا قاعدة البيانات يفضل أن يتم الإتصال بها Remotly من خلال ال SqlServer لان اغلب الشركات تعمل على نظام ال Multi Farm وبالتالي

يكون التطبيق على سيرفر وقاعدة البيانات على سيرفر وووو

أنا اللي فهمت في كودك إن عملية التعديل لا تتم والدليل أن الجدول في قاعدة البيانات عندما اقوم بتغيير المجموعة الخاصة بك من الاصدقاء مثلا للعمل لا يتم تغييرها.

بعدين لاحظت بداخل ال Grid إنك عرضتي المجموعات على شكل ارقام .. المفروض تعرضيها ك Group name .. عندك فكرة كيف؟

نصيحتي بس هو تغيير طريقتك في البرمجة و هذا اكيد لا يعني أن أقلل من مستواك بالعكس انا من المعجبين ببرمجة جوليا و افكارها و نشاطها في المشاركات :)

و أكيد آسف على التقصير

You can fly while you can touch the sky

#13

سلام ...

اقتباس
شوفي انا لاحظت إن أفكارك حلوة دايما لكن !! المصيبة طلعتي بتستخدمي ال Wizard و هاي بتساوي مصيبة .. إياك من الويزرد

يعني انا والله ما قدرت افهم أي شي من الكود فما بالك لو شخص مبتديء؟ حتى بالشركات ممنوع ال Wizard

في الحقيقة لدي وجهة نظر "ما دمت سوف استخدم نفس الكود في كل مره ، و لدي معرفة سابقة بمحتويات الكود و عمله ، فلا بأس باستخدام الـ Wizard ، و اقضي وقتي في تطوير أشياء غير اعتيادية"، فالـ Wizard ليس فقط مخصص لغير المبرمجين، حاول النظر في الاتجاه الآخر .

اقتباس
ثانيا قاعدة البيانات يفضل أن يتم الإتصال بها Remotly من خلال ال SqlServer لان اغلب الشركات تعمل على نظام ال Multi Farm وبالتالي

يكون التطبيق على سيرفر وقاعدة البيانات على سيرفر وووو

أعتذر ، و لكن لم أستوعب الفكرة هنا!

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

بعدين لاحظت بداخل ال Grid إنك عرضتي المجموعات على شكل ارقام .. المفروض تعرضيها ك Group name .. عندك فكرة كيف؟

نعم ، بالطبع :D .

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

و أكيد آسف على التقصير

، شكرا لك.

، تحياتي.

تم تعديل هذه المشاركة بواسطة جوليا في 27 يونيو 2007 في 06:45

#14

انت نسيت ان تخبري السيرفر من اين ياتي بمدخلات الدالة التي تقوم بالتحديث UpdateMCategory.هذه الدالة تقبل عدة مدخلات parameters وانت عرفت المدخلات في ال datasource لكن لم تخبري السيرفر كيق يحصل على قيم هذه المدخلات.

لذلك قومي بعمل التالي لكل مدخل.مثلا المدخل Group سيحصل على قيمته من الكنترول RadioButtonList1 عن طريق الخاصية SelectedValue

<UpdateParameters>

			  <asp:ControlParameter Name="Group" Type="Int32" ControlId="RadioButtonList1" PropertyName="SelectedValue"/>
</UpdateParameters>

يبدو ان الموضوع قديم نوعا ما و لم انتبه لذلك :)

تم تعديل هذه المشاركة بواسطة madani في 27 يونيو 2007 في 12:35

#15

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

أهلا بك Madani

أنا لم انسى اخبار الـ Server بنوع المدخل ، بل الأدهى من ذلك انني لا اعرف أنه يتوجب علي ذلك ، حيث كما قيل عني انني من مدمني الـ Wizard ، والذي لن يجعلني احصل على وظيفة مستقبلا .

حسنا ، لقد قمت ببعض التعديلات ، ضمن طبقة الـ BAL جعلت الـطريقة التي تقوم بعملية الـ Update ،التي تستقبلت المتغيرات...

و التعديل هو فقط في المسمى لحقل الـ Group إلى Group_NO ، حيث انني استخدم مفهوم التزامن .

طبعا ما زلت مصرة ان استخدم الـ wizard لذا لن اخبر الـ Server بنوع المدخل ، فليبحث عنه بنفسه .

باختصار التعديل الذي اجريته جعل العملية تنفذ بنجاح!

RadioButtonList.rar

شكرا لك على المعلومة التي اضفتها لي.

أخيرا ، أن اجد الاجابة في وقت متاخر ، خير من ان لا اجدها ابدا.

، دمت بخير.

#16

صحيح ,وهذا هو ما يسمى auto-binding وهو في الحقيقة موجود في تطبيقات الويب بالجافا من وقت طويل والحمد لله انه اضيف للasp.net

هناك كذلك طريقة اخرى (ربما اسهل) وهو ان نجعل دالة الupdate تقبل مدخل من نوع Category مثلا ثم نعمل binding .اثناء الRunTime سيقوم السيرفر بملء خصائص الكائن Category و يرسله الى الدالة كمدخل:

public void Update(Category category)
{
//do the update here
}

وهناك ميزة حلوة وهو انه باستطاعتنا تمرير الcategory الموجود قبل التحديث و الcategory الموجود بعد التحديث (اي الذي حدثناه باستعمال الفورم).كلما علينا عمله هو تحديد الخاصية OldValuesParameterFormatString (مثلا نعطيها القيمة Old{0}) و الخاصية ConflictDetection=CompareAllValues

الان نغير الدالة update بحيث تقبل المدخل category وهو الكائن الذي تم تحديثه عن طريق الفورم ,بينما المدخل الثاني والذي يجب ان يكون اسمه Oldcategory فسيحوي الكائن القديم قبل التحديث.الان نستطيع عمل مقارنة لبعض الخصائص على حسب ما نحتاجه:

public void Update(Category category,Category Oldcategory)
{
if(category.DateCreated>Oldcategory.DateCreated)
//do somthing

}

تحياتي

مدني

#17

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

الأخ / مدني

متابعة ممتازه ، شكرا لك ..

الفكرة التي طرحتها لتحسين الكود رائعة ،

و لقد حاولت تطبيقها ضمن مفهوم التزامن ،

لكن لم تعمل معي بشكل جيدا ، قد يعود طبعا إلى كود الـ BAL ،

أو ربما لكود الـ ASP.Net Page ، لأنني اشك في أمر تلقي الـ Server لبراميتر الكائن و تضمينها ..

لا اعلم الأمر مشوش بالنسبة لي ، لا أظنه من الصحيح أن يتم عمل Bind للبراميترات ..

على كل حال ، كما قلت قد يكون الخطأ موجود ضمن كود الـ BAL ، و الذي أعتقد أننني لم اكتبه بشكل صحيح ...

من ثم لجأت الى تطبيق الفكرة بإستبعاد مفهوم التزامن ، و أيضا لم تعمل معي ،

هذا هو الكود :

اقتباس

Public Function Update(ByVal Group As DataSet1.GroupRow) As Boolean

Dim Data As DataSet1.GroupDataTable = Adapter.GetDataBy(Group.Group_NO)

If Data.Count = 0 Then

Return False

End If

Dim Row As DataSet1.GroupRow = Data(0)

Row.Group_Name = Group.Group_Name

Dim rowAffected As Integer = Adapter.Update(Row)

Return rowAffected = 1

End Function

لاحظ العبارة باللون الأحمر ، في الواقع اشك بأمرها ...

حسنا ، يكفي إلى هنا ..

أنتظر رأيك .

، تحياتي.

#18

مدني ..

لم تجب على سؤالي :)

#19

اهلا بك من جديد :)

ربما نسيت ان تحددي نوع الكائن الذي تودين ارساله كمدخل لدالة التحديث :

<asp:ObjectDataSource DataObjectTypeName="DataSet1.GroupRow"
#20

:huh: لم تعمل معي .

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

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