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

استعمال كائن مع Objectdatasource للتحديث و الاضافة

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

الاخت جوليا طلبت مثالا عن ذلك و رايت من الاحسن تخصيص موضوع لذلك خاصة اننا نبحث عن object oriented design كهدف للمطورين بدل الاعتماد على لغات الsql و التعامل المباشر مع قواعد البيانات.

على العموم المثال يتحدث عن كيفية تحديث منتدى معين (كود الاضافة غير متوفر لكن يمكن اضافته بسهولة بعد فهم كود التحديث)

الكائن :Forum:

الخصائص:Id,Name,Description,groupId,Active

الدالة العادية للتحديث هي الدالة Update التي تستقبل مدخلا عن كل خاصية,اي كالتالي

public static void Update(int id, string name, string description, int groupId, bool active)
		{
			//old_Name.ToString();
			Forums forum = new Forums(id);
			forum.Name = name;
			forum.Description = description;
			forum.GroupID = groupId;
			forum.Active = active;
			forum.Update();
		}

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

 Name:
				<asp:TextBox ID="NameTextBox" runat="server" Text='<%# Bind("Name") %>'>

فان الصفحة تقوم باعطاء قيمة حقل النص NameTextBox كقيمة للخاصية Forum.Name و هكذا مع كل الخصائص الاخرى ,و بمجرد ان تنقر زر التحديث فان كائنا من نوع Forum وبه كل الخصائص يكون قد تم ارساله الى الدالة Update:

public static void Update(Forums forum)
		{

			//do some DB update operations here
		}

ماذا لو اننا نود عمل مقارنة في داخل الدالة Update بين القيم القديمة و القيم الجديدة ,اي قيم id,name,description,groupid,active قبل التحديث و تلك التي تم تحديثها.

الحال هو ان تضيف الخاصية OldValuesParameterFormatString الى objectDataSource

ولو افترضنا ان الخاصية OldValuesParameterFormatString هي كالتالي:

OldValuesParameterFormatString="Old{0}"

فان الدالة Update يجب ان تتغير و تصبح:

public static void Update(Forums forum, Forums Oldforum)
		{

			//do some DB update operation
		}

تلاحظ ان كلمة Old سبقت اسم المدخل الاول للدلالة على القيمة القديمة للكائن (يمكن استعمال اي كلمة اخرى)

الان يمكننا عمل مقارنة داخل الدالة

public static void Update(Forums forum, Forums Oldforum)
		{

			if(form.Active!=Oldforum.Active)
		throw new Exception("you can not update active status for this forum");
		}

هناك خصائص مهمة و جب الانتباه اليها ك DataObjectTypeName التي تعين نوع المدخل الى الدالة Update :

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetAll" OldValuesParameterFormatString="Old{0}" ConflictDetection="CompareAllValues"
			TypeName="ArabASPNETForum.DAL.Forums" UpdateMethod="Update" DataObjectTypeName="ArabASPNETForum.DAL.Forums">
		</asp:ObjectDataSource>

<asp:FormView ID="FormView1" runat="server" DataSourceID="ObjectDataSource1" DefaultMode="Edit" OnItemUpdating="FormView1_ItemUpdating" DataKeyNames="ID">
			<EditItemTemplate>


				ID:
				<asp:TextBox ID="IDTextBox" runat="server" Text='<%# Bind("ID") %>'>
				</asp:TextBox><br />
				Name:
				<asp:TextBox ID="NameTextBox" runat="server" Text='<%# Bind("Name") %>'>
				</asp:TextBox><br /> 
				Description:
				<asp:TextBox ID="DescriptionTextBox" runat="server" Text='<%# Bind("Description") %>'>
				</asp:TextBox><br />
				GroupID:
				<asp:RadioButtonList ID="RadioButtonList1" runat="server" DataSourceID="ObjectDataSource2"
					DataTextField="Name" DataValueField="ID" SelectedValue='<%# Bind("GroupID") %>'>
				</asp:RadioButtonList><br />
				Active:
				<asp:CheckBox ID="ActiveCheckBox" runat="server" Checked='<%# Bind("Active") %>' /><br />

				<asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True" CommandName="Update"
					Text="Update">
				</asp:LinkButton>
				<asp:LinkButton ID="UpdateCancelButton" runat="server" CausesValidation="False" CommandName="Cancel"
					Text="Cancel">
				</asp:LinkButton>
			</EditItemTemplate>



		</asp:FormView>
#2

لا أدري لما زاد الأمر تعقيدا !

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

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