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

استخدام DataGrid أو DataView لادخال البيانات

مغلق
بدأه Scoool في 3 أبريل 2007 · 5 رد · 4,090 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع
Basmalah.gif

فكرة الدرس:

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

وهنا فكرة متواضعة لعمل ذلك .. أرجو ان تكون مفيدة وشاملة ..

: طريقة العمل :

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

وكذلك اعتمدت في مثالي هذا على Binding Code يعني يفترض ان لديك خبرة في ADO.Net لاننا سنستخدم DataSet وDataAdapter ولوازمها ..

كل ما نحتاجه بعد ذلك هو :

· صفحة ASPX

· داتا غريد DataGrid في 2003 أو GridView في 2005

· Button

الخطوات :

بفرض انك قد قمت مسبقا بتصميم الصفحة وعرض البيانات على الغريد فيو بالطريقة المعتادة BoundColumn ،، وكذلك فعّلت خاصية التحديث Enable Editing=True ..

1. تعبئة البيانات في الغريد :

انشأ داله لتحميل البيانات كالتالي :

( لاحظ انني لم اتطرق لكيفية تحميل البيانات انما استخدمت Class خاص بي في ذلك )

Sub LoadData()



		Viewstate("NewRow") = False 



		Dim strsql As String = "Select * from Table “





		Dim  myDs As New System.Data.DataSet

		myDs = myCls.GetDS(strsql)



		dg.DataSource = myDs.Tables(0)

		dg.DataBind()



End Sub

وبعد ذلك قم باستدعاء الدالة في الحدث :

Page_Load كالتالي :

 

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load



		If Not Page.IsPostBack Then

			Call LoadData()



		End If



 End Sub

يجب أن تكون هذه المهمة انجزت والبيانات قد ظهرت على الغريد والا فلا تنتقل الى الخطوة التالية ..

2. تغيير الأعمدة الى TempleteColumn

في مربع تحرير الأعمدة Edit Column اذهب الى كل عمود واضغط على اللنك الموضح في الصورة :

img1.gif

الآن اصبح لديك TemplateColumn وللتأكد من ذلك ارجع الى صفحة HTML

ستجد أن العنصر على سبيل المثال name أصبح كود HTML له كالتالي :

		  

<asp:TemplateField HeaderText="name" SortExpression="name">

   <EditItemTemplate>

	<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("name") %>'></asp:TextBox>

   </EditItemTemplate>

	 <ItemTemplate>

	  <asp:Label ID="Label2" runat="server" Text='<%# Bind("name") %>'></asp:Label>

	 </ItemTemplate>

</asp:TemplateField>

واذا كنت من غير الراغبين باستخدام HTML اضغط على القريد باليمين واختر Edit Template ثم اختر العنصر name لاحظ خانة EditItemTemplate ومربع النص بداخلها سيتم استخدامه للادخال كذلك ..

ماذا حصل :

لفهم الموضوع يجب عليك مراجعة المواضيع المتعلقة بهذا الجزء Template ..

3. اضافة كود زر الاضافة :

في الزر المخصص للاضافة ولنفترض هنا ان اسمه BtnInsert اضف الكود التالي:

		Call LoadData()



		'استخدم vieswstate لحفظ قيمة التحديث اثناس التنقل في الصفحة

		ViewState("NewRow") = True



		' احتفظ بعدد الصفوف في متغير

		Dim recordcount As Integer = myDs.Tables(0).Rows.Count



		'  نحتاج جدول بيانات لتخزين الشكل أو الاعمدة الموجودة في قاعدة البيانات واستخدامها لاضافة صف جديد فارغ

		Dim Tbl As New Data.DataTable

		Tbl = myDs.Tables(0)



		' هنا يتم اضافة الصف للجدول الجديد

		Dim dr As Data.DataRow = Tbl.NewRow

		Tbl.Rows.Add(dr)



		' سيكون الكود التالي مهم للغاية في حالة استخدام Paging للداتا غريد 

		' .......وسيكون مثالنا على ان عدد الصفوف في الصفحة الواحدة 10 صفوف 



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

		' يمكن استخدام هذا الجزء دون غيره في حالة عدم استخدام التصفح Paging 

		If recordcount = 0 Then

			GridView1.PageIndex = 0

			GridView1.EditIndex = 0

		End If



		' أما الحالة الثانية عندما تكون الصفحة ممنلئة

		' فلو افترضنا ان عدد الصفوف في حالة التصفح هي 10 فيجب فتح صفحة جديدة

		If recordcount = GridView1.PageSize * GridView1.PageCount Then

			Dim strPgsize As Integer = GridView1.PageSize



			GridView1.PageIndex = (recordcount) \ strPgsize

			GridView1.EditIndex = 0

		End If



		' الحالة الأخيرة عندما يكون الصف المضاف في منتصف الصفحة للغريد سواء في الصفحة الأولى أو غيرها

		If recordcount >= 1 Then

			Dim strPgsize As Integer = GridView1.PageSize



			GridView1.PageIndex = (recordcount) \ strPgsize



			Dim intItemIn As Int16

			intItemIn = (myDs.Tables(0).Rows.Count - (strPgsize * GridView1.PageIndex)) - 1

			GridView1.EditIndex = intItemIn

		End If



		' أخيرا حمل البيانات الى الجدول

		GridView1.DataSource = myDs

		GridView1.DataBind()

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

4. الهم الأكبر : الاضافة الى قاعدة البيانات /

لا تشغل نفسك كثيرا فالحل سهل جدا فقط عليك استخدام الحدث GridView1_RowUpdating للاضافة

فاذا كنت تعلم انه من المفروض استخدام ذلك الحدث لتحديث البيانات فانه يمكنك استخدامه ايضا للاضافة وذلك كما يلي في الشرح ..

كما تلاحظ اننا استخدمنا ViewState لحفظ متغير من نوع Boolean عند الضغط على زر الاضافة ،، وسوف تعرف الآن أننا استخدمناه لغرض الاضافة فقط ،، كيف ..

في الحدث GridView1_RowUpdating استخدم المتغير ViewState("NewRow") كالتالي :

		If ViewState("NewRow") = True Then

			' استخدم طريقة الادخال المعتادة Insert

		Else

			' يمكنك هنا ان تستخدم جملة Update

		End If

ملحوظة : لاحظ اننا في بداية الدرس خصصنا قيمة False للمتغير ViewState("NewRow") يعني انه لن تكون حالة الادخال مفعلة الا عند الضغط على الزر ..

ملخص :

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

أما مستخدمو 2003 وكما أسلفت فبامكانهم استخدام الطريقة مع بعض التغييرات كما في DataGrid وفروقاته عن GridView ولن أبخل باذن الله عن الرد على أي سؤال ..

أدعو لي

#2

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

وسأجربه قريباً بإذن الله

لكن السؤال

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

SQL server 2000

أرجو الإفادة نفع الله بك

مع التحية

#3

يعطيك الف عافيه ليا مدة وانا ادور على موضوع شبيه بهذا الموضوع

تسلم ياغالي وماقصرت

لا اله الا الله عدد ماكان ولا اله الا الله عدد ماسيكون ولا اله الا الله عدد الحركات والسكون

66d3fff832.jpg
#4

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

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

لا اله الا الله عدد ماكان ولا اله الا الله عدد ماسيكون ولا اله الا الله عدد الحركات والسكون

66d3fff832.jpg
#5

جميل مبدع

شرح جميل جدا شكرا شكرا شكرا -waf

Post Back Is My Enemy And JavaScript Is my Weapon

#6

السلام عليكم

أخي Scoool شرحك ممتاز وعندي سؤالين أو طلبين .... موافق لطلب أخونا shrek

1- يكون الشرح بلغة الـ #C

أو

2- توضيح الـ comment على الشفرة أو الشفرات السالفة الذكر

مجدداً شكراً جزيلاً ....

تم تعديل هذه المشاركة بواسطة asajm في 23 أغسطس 2007 في 22:47

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

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