
فكرة الدرس:
لم يتح الدوت نت لنا على عكس عادته طريقة سهلة لاستخدام الداتاغريد في 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 اذهب الى كل عمود واضغط على اللنك الموضح في الصورة :

الآن اصبح لديك 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 ولن أبخل باذن الله عن الرد على أي سؤال ..
أدعو لي
