الداتا قريد DataGridview فى بيئة vb.net(إضافة ، حذف ، تعديل ، طباعة)

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل

الداتا قريد DataGridview فى بيئة vb.net(إضافة ، حذف ، تعديل ، طباعة)

مُساهمة من طرف أحمد مناع في الأحد يونيو 02, 2013 12:54 pm




1- كيف تضيف سجل في الداتا قريد (DataGridview) ؟..
2- كيف تحذف سجل من الداتاقريد (DataGridview) ؟..
3- كيف تقوم بتعديل سجل في الداتا قريد (DataGridview)؟..
4- كيف تقوم بالطباعة من الداتاقريد (DataGridview) ؟..
5- كيف تغير لون خلية في الداتاقريد بناء على شرط معين (DataGridview)؟..
6- كيف تجمع حقلين من الدتا قريد و تضيف النتيجة في حقل مستقل (DataGridview)؟..
7- كيف تضيف حقل في الداتا قريد من نوع combobox أو textbox ......؟..





أولا: ماهي DataGridview control؟

DataGridview control تستخدم لعرض بيانات مجدولة مع أنواع مختلفة من الـ datasource
كما أنها مزودة بالعديد من الـ properties و الـ method و الـ event لإمكانية تخصيص مظهر وسلوك الـداتاقريد.DataGridview زودت بالعديد من الخصائص الأساسية و المطورة المفقودة في الـ datagrid.

الفرق بين الdatagridview و الـ datagrid؟؟

إضغط هنا لزيارة المقال





ثانيا: كيف تستخدم ال datagridview control ؟

نفرض أن لدينا جدولين في قواعد بيانات أكسس(DGview) باسم tb1 , tb2
الجدول الأول يحتوي على أربع حقول( الرقم وهو المفتاح، والاسم، العنوان، رقم المدينة وهو المفتاح الأجنبي)
الجدول الثاني يحتوي على حقلين فقط ( رقم وهو المفتاح الأساسي ، و اسم المدينة)
ثم يتم الربط بينهما كما هو موضح في الصورة




ننشئ مديول 1 خاصة بالاتصال بقاعدة البيانات :
الرمز:

Module Module1

        Private ConStr As String
        Private Conn As OleDbConnection
        'انشاء اتصال جديد
        Public Sub CreateConn()
                ConStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & _
                                Application.StartupPath & "\DGview.mdb"
                Conn = New OleDbConnection(ConStr)
        End Sub
        'ارجاعة قيمة المتغير  الخاص بالاتصال
        Public Function getConn() As OleDbConnection
                Return Conn
        End Function
        'فتح الاتصال
        Public Sub OpenConn()
                Conn.Open()
        End Sub
        'اغلاق الاتصال
        Public Sub CloseConn()
                Conn.Close()
                Conn.Dispose()
                Conn = Nothing
        End Sub
End Module





لنبدأ الآن شرح العمليات الأساسية:


1- الإضافة:



زر الإضافة خاص بتفعيل الحقول و زيادة الرقم التسلسلي بواحد واظهاره في
مربع نص غير مفعل ، عند اكمال الحقول نختار زر حفظ لحفظ البيانات ،الكود الخاص بزر الحفظ
الرمز:

                Try
                        Dim SavInto As New OleDb.OleDbCommand
                        CreateConn()
                        SavInto.Connection = getConn()
                        SavInto.CommandType = CommandType.Text
                        SavInto.CommandText = "INSERT INTO tb1(ID,name,Address,countryID)" & _
                        "values ('" & Me.txt_ID.Text & "','" & Me.txt_name.Text & "','" & Me.txt_address.Text & "','" & Me.cmb_country.SelectedValue & "') "
                        OpenConn()
                        If SavInto.ExecuteNonQuery() Then
                                'إذا تمت عملية الإضافة بنجاح يتم اضافة الحقول إلى الداتا قريد مباشرة بدل استراجاعها من الداتابيس
                                t1.Text = "تمت إضافة السجل الجديد بنجاح"
                                DGview.Rows.Add()
                                DGview.Item(0, DGview.Rows.Count - 1).Value = Me.txt_ID.Text
                                DGview.Item(1, DGview.Rows.Count - 1).Value = Me.txt_name.Text
                                DGview.Item(2, DGview.Rows.Count - 1).Value = Me.txt_address.Text
                                DGview.Item(3, DGview.Rows.Count - 1).Value = Me.cmb_country.Text

                                Me.btn_save.Enabled = False
                                Me.btn_add.Enabled = True
                                Me.grp1.Enabled = False
                        Else
                                MsgBox("فشلت عملية الإضافة", MsgBoxStyle.MsgBoxRight, "رسالة خطأ")
                        End If
                        CloseConn()
                Catch ex As Exception
                        MsgBox("صادف مشكله أثناء القيام بعمليه الإضافه , الرجاء المحاولة لاحقا", MsgBoxStyle.OkOnly, "تنبيه")
                End Try






2- الحذف:





لحذف سجل معين من الداتا قريد يتم اختياره السجل المحدد بعد ذلك انقر على زر حذف و هذا الكود الخاص بزر الحذف:
الرمز:

If MsgBox("هل أنت متأكد من عملية الحذف  ? ", MsgBoxStyle.OkCancel, "تأكيد حذف") = MsgBoxResult.Cancel Then
                        Exit Sub
                End If
                Try
                        CreateConn()
                        Dim SavInto As New OleDb.OleDbCommand
                        SavInto.Connection = getConn()
                        SavInto.CommandType = CommandType.Text
                        '-----------------
                        'حذف قيمة السجل الذي يتم تحديده
                        'DGview.Item(0, DGview.CurrentCellAddress.Y).Value
                        SavInto.CommandText = "DELETE FROM tb1  WHERE ID =" & CType(DGview.Item(0, DGview.CurrentCellAddress.Y).Value, Integer) & ""
                        '---------------
                        OpenConn()
                        If SavInto.ExecuteNonQuery() Then
                                t1.Text = "تمت علمية حذف البيانات بنجاح"
                                'إذا تم حذف السجل بنجاخ من قاعدة البيانات
                                'يتم ايضا حذفه من الداتاقريد مباشرة
                                If Not DGview.CurrentRow.IsNewRow Then
                                        DGview.Rows.Remove(DGview.CurrentRow)
                                End If
                        Else
                                MsgBox("فشلت عملية الحذف  حاول مرة أخرى ", MsgBoxStyle.MsgBoxRight, "فشل العملية")
                        End If
                        CloseConn()

                Catch ex As Exception
                        MsgBox("لا يوجد أي سجلات للحذف  ", MsgBoxStyle.MsgBoxRight, "فشل العملية")

                End Try






3- التعديل:






قم بتعيين السجل المراد تعديله ثم اختر تعديل تظهر لك نافذة صغير(panel) تعرض لك بيانات السجل المراد تعديله

الكود الخاص بزر تعديل:
الرمز:

عرض النافذة الصغيرة الخاصة بالتعديل’
                '(panel)
                Me.panel.Visible = True
                Me.btn_search.Enabled = False
                Me.Button2.Enabled = False
                'تعيين قيمة الحقول بنفس قيم السجل الذي تم تحديده
                Me.IDTextBox.Text = DGview.Item(0, DGview.CurrentCellAddress.Y).Value
                Me.txt_name1.Text = DGview.Item(1, DGview.CurrentCellAddress.Y).Value
                Me.txt_address1.Text = DGview.Item(2, DGview.CurrentCellAddress.Y).Value
                PlaceTextBox.Text = DGview.Item(3, DGview.CurrentCellAddress.Y).Value


الكود الخاص بزر حفظ:
الرمز:

If MsgBox("تأكيد عملية التعديل ؟ ", MsgBoxStyle.OkCancel, "تعديل المبادرات") = MsgBoxResult.Cancel Then
                        Exit Sub
                End If
                Try
                        Dim SavInto As New OleDb.OleDbCommand
                        CreateConn()
                        SavInto.Connection = getConn()
                        SavInto.CommandType = CommandType.Text
                        SavInto.CommandText = "UPDATE tb1 SET  name = '" & Trim(Me.txt_name1.Text) & "' , Address= '" & Trim(Me.txt_address1.Text) & "', countryID = '" & Trim(Me.PlaceTextBox.SelectedValue.ToString) & "' WHERE  ID = " & CType(IDTextBox.Text, Integer) & ""
                        OpenConn()
                        If SavInto.ExecuteNonQuery() Then

إذا تم تعديل قاعدة البيانات بنجاح يتم تعديل الداتاقريد مباشرة’
                                MsgBox("تم تعديـــل " & Me.txt_name2.Text & " بنجاح", MsgBoxStyle.MsgBoxRight, "نجاح العملية")
                                DGview.Item(1, DGview.CurrentCellAddress.Y).Value() = txt_name1.Text
                                DGview.Item(2, DGview.CurrentCellAddress.Y).Value() = txt_address1.Text
                                DGview.Item(3, DGview.CurrentCellAddress.Y).Value() = PlaceTextBox.Text
                                'اخفاء نافذة التعديل
                                Me.panel.Visible = False

                                Me.btn_search.Enabled = True
                                Me.Button2.Enabled = True
                                t1.Text = "تم التعديل بنجاح"
                        Else
                                MsgBox("لم يتم تعديل " & Me.txt_name2.Text, MsgBoxStyle.MsgBoxRight, "رسالة خطأ")
                        End If
                        CloseConn()
                Catch ex As Exception
                        MsgBox(ex.Message)
                End Try



4- البحث:




يتم البحث بناء على الحقل الذي يتم تفعيلة (بوضع إشارة صح على الحقل) يمكن البحث بحقل أو أكثر في نفس الوقت :
الرمز:

المتغيران :    Where_SQL , SQLTemp

متغيرات من نوع string  يتم تعيرفها في قسم التصريحات العامة

SQLTemp = ""
                Where_SQL = ""
هنا يتم بناء جملة الاستعلام’
فقط الجزء الخاص بالجملة  where’

                ‘كل مربع نص يحتوي على قيمه يتم اضافته الى جملة الاستعلام’
                If Trim(Me.txt_num.Text) <> "" Then
                        Where_SQL = "  tb1.ID = " & CType(txt_num.Text, Integer) & ""
                        SQLTemp &= Temp & Where_SQL
                End If
                '-----------------
                If Trim(Me.txt_name2.Text) <> "" Then
                        Where_SQL = " name like '%" & txt_name2.Text & "%'"
                        SQLTemp &= Temp & Where_SQL
                End If
                '----------
                If Trim(Me.txt_address2.Text) <> "" Then
                        Where_SQL = " address like '%" & Me.txt_address2.Text & "%' "
                        SQLTemp &= Temp & Where_SQL
                End If
                '------------
                If Me.txt_region.Text <> "" And Me.b_region.Checked = True Then
                        Where_SQL = " tb2.ID =  " & CType(Me.txt_region.SelectedValue.ToString, Integer) & "    "
                        SQLTemp &= Temp & Where_SQL
                End If
‘يتم استدعاء الدالة
FillDG(SQLTemp)’
‘لتعبئة الداتاقريد بنتائج البحث
                FillDG(SQLTemp)

ويتم تعريف الدالة FillDG كما يلي:
الرمز:

        Sub FillDG(ByVal SQL)

                CreateConn()

                OpenConn()
                cmd.Connection = getConn()

                DGview.Columns.Clear()
                cmd.CommandType = CommandType.Text
                'جملة الاستعلام الخاصة بالبحث
                cmd.CommandText = "select tb1.ID ,name,Address,countryname from tb1, tb2 where tb1.countryID=tb2.ID" & SQL
                dr = cmd.ExecuteReader
                'تحديد عدد الأعمدة في الداتا قريد
                DGview.ColumnCount = 4
                'تعيين اسماء الأعمدة في الداتاقريد
                DGview.Columns(0).HeaderText = "الرقم"
                DGview.Columns(1).HeaderText = "الاسم"
                DGview.Columns(2).HeaderText = "العنوان"
                DGview.Columns(3).HeaderText = "المدينة"

                'loop
                'يتم تعببئة الداتا قريد بنتائج البحث
                Dim n As Integer
                n = -1
                Do While dr.Read

                        n += 1
                        DGview.RowCount += 1
                        DGview.Item(0, n).Value = dr.Item("ID") '
                        DGview.Item(1, n).Value = dr.Item("name")
                        DGview.Item(2, n).Value = dr.Item("Address")
                        DGview.Item(3, n).Value = dr.Item("countryname")
                Loop
                dr.Close()
                CloseConn()


        End Sub




5- الطباعة:

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

البيانات من الداتا قريد إلى الكريستال ريبورت. وجدت في احد الردود في احد
المنتديات أشارة باستخدام جدول مؤقت لحفظ البيانات و استخدامه في الطباعة
.و هي فكرة مبسطة و فعلاً

ادت المطلوب و الطريقة كما يلي: <<<إذا كان هناك طريقة أخرى أفضل من هذه فلا تتردد في وضعها لنستفيد منها جميعاً


ننشيء جدول باسم tbl_temp يحتوي على نفس الحقول الموجودة في الجدول tb1 يتم
تخزين نتائج البحث من الداتاقريد فيه أولا بعذ ذلك يتم ربط

الكريستال ريبورت بالجدول المؤقت مباشرة .



عند اختيار زر بحث يتم تعبئة نتائج البحث في datasource ليتم الاستفادة من الـ datesource لتعبئة الجدول المؤقت

كود الزر الخاص بالطباعة:
الرمز:

Try
                        ' داله لحذف جميع البيانات السابقة الموجودة في الجدول المؤقت
                        delete_temp()
                        'دالة لادخال جميع السجلات الموجودة في الداتا قريد (نتيجة البحث) للجدول المؤقت
                        insert_temp()

                        'لعرض الفورم الخاص بالتقرير
                        frm_rep.Show()
                Catch ex As Exception
                        MsgBox(ex.Message)
                End Try

تعريف الدالة delete_temp()
  'حذف جميع السجلات الموجودة في الجدول المؤقت
        Private Sub delete_temp()
                Try
                        Dim SavInto As New OleDb.OleDbCommand
                        CreateConn()
                        SavInto.Connection = getConn()
                        SavInto.CommandType = CommandType.Text

                        SavInto.CommandText = "delete * from tbl_temp "


                        OpenConn()
                        SavInto.ExecuteNonQuery()
                        CloseConn()
                        SavInto.Dispose()
                        SavInto = Nothing
                Catch ex As Exception
                        MsgBox(ex.Message)
                End Try

  End Sub

تعريف الدالة Insert_temp()
الرمز:

        Private Sub insert_temp()
                'يتم ادخال جميع السجلات الموجودة في
                'datasource (ds)
                'إلى الجدول المؤقت

                Dim i As Integer
                Try
                        Dim SavInto As New OleDb.OleDbCommand
                        CreateConn()

                        SavInto.Connection = getConn()
                        SavInto.CommandType = CommandType.Text
                        OpenConn()
                        'حلقة تبدأ من صفر و حتى آخر سجل الموجودةالـ
                        'datesource(ds)
                        For i = 0 To ds.Tables("table").Rows.Count - 1
                                SavInto.CommandText = "INSERT INTO tbl_temp(ID,name,Address,countryID)" & _
                                "values ('" & ds.Tables("table").Rows(i).Item(0) & "','" & ds.Tables("table").Rows(i).Item(1).ToString & "','" & ds.Tables("table").Rows(i).Item(2).ToString & "','" & ds.Tables("table").Rows(i).Item(3).ToString & "' )"
                                SavInto.ExecuteNonQuery()
                        Next
                        SavInto.Dispose()
                        SavInto = Nothing
                        CloseConn()
                Catch ex As Exception
                        MsgBox(ex.Message)
                End Try

        End Sub

لم يتبقى فقط إلا ربط الكريستال ريبورت بجدول الـ tbl_temp لطباعة نتائج البحث










شرح بعض العمليات الإضافية:



لتغيير لون خلية بناء على شرط معين:


عند النقر المزدوج على الداتاقريد نختار الحدث CellFormatting من القائمة




و نكتب الكود التالي:
الرمز:

' تحديد العمود الذى يتم تغير خلاياه بشرط معين
                If e.ColumnIndex = DGview.Columns(2).Index Then

                        ' متغير يحمل قيمة الخلية
                        Dim Obj As Object = DGview.Rows(e.RowIndex).Cells(2).Value

                        'اذا كانت قيمة الخلية =  XXX
                        'يتم تغير الخلية باللون الأحمر

                        If Obj = "ضع الجملة التي تريدها هنا" Then
                                e.CellStyle.BackColor = Color.Red
                                e.CellStyle.SelectionBackColor = Color.Red
                                e.CellStyle.SelectionForeColor = Color.Black
                        End If

                End If




لتغيير العنوان الخاص باسم الحقل:

الرمز:

DGview.Columns(0).HeaderText = "الرقم"
DGview.Columns(1).HeaderText = "الاسم"
DGview.Columns(2).HeaderText = "العنوان"
DGview.Columns(3).HeaderText = "المدينة"





لإضافة عمود من نوع (ComboBox) للداتاقريد:



الرمز:

Dim cmb1 As New DataGridViewComboBoxColumn
                With cmb1
                        .HeaderText = "اسم العمود "
                        .Items.Add("الخيار الأول")
                        .Items.Add("الخيار الثاني")
                        .AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader
                End With
                DGview.Columns.Add(cmb1)
DGview يمثل اسم الداتاقريد


نفس الفكرة لاضافة عمود من نوع checkbox استبدل الكائن ( DataGridViewComboBoxColumn) بـ DataGridViewCheckBoxColumn






لإضافة عمود من نوع (TextBox)للداتاقريد:





الرمز:
  DGview.Columns.Add("column name", " عنوان العمود")

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

مثال : في الصورة السابقة يكون رقم العمود 4 لأننا العد بيدأ من الصفر ( الرقم ، الأسم ، العنوان ، المدينة ، اسم العمود):

الرمز:
    DGview.Item(رقم العمود, رقم الخلية).Value =”. . .”



لجمع قيمة حقلين و إضافة النتيجة في العمود الثالث من الداتا قريد:

الرمز:
    DGview.Item(3, DGview.Rows.Count - 1).Value = CType(Me.txt1.Text, Integer) + CType(Me.txt2.Text, Integer)

الرقم 3 يمثل رقم العمود الذي سوف يتم اضافة المجموع فيه و يتم تحويل txt1.Text و الحقل txt2.Text الى رقم (integer).







تم الانتهاء بحمد الله....



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

إلية عند الحاجة . و أحب أن أعتذر عن أي خطأ او قصور في الشرح و من لديه ملاحظات أو اضافات يضعها ليستفيد الجميع منها ..

و أشكر اختى العزيزة التي ساعدتني في مادة هذا الدرس.




دمتم في رعاية الرحمن

المصدر / http://ib.vbsq.net/index.php?showtopic=878

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم

إن فقدت مكان بذورك التي بذرتها يوما ما سيخبرك المطر أين زرعتها ..لذا إبذر الخير فوق أي أرض وتحت أي سماء ومع أي أحد.. فأنت لا تعلم أين تجده ومتى تجده؟! إزرع جميلا ولو في غير موضعه .... فلا يضيع جميلا أينما زرعا .. فما أجمل العطاء... فقد تجد جزاءه في الدنيا أو يكون لك ذخرا في الآخرة

أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 810
النقاط : 1479
التقيم : 69
الدولة : مصر
الجنس : ذكر

http://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: الداتا قريد DataGridview فى بيئة vb.net(إضافة ، حذف ، تعديل ، طباعة)

مُساهمة من طرف VB.NET في الأربعاء يونيو 05, 2013 7:17 pm

بدأتم فى الدوت نت من غيرى يا خونه ............هههههههههههههههههه مش قلنا هنعمل دورة كاملة

VB.NET
المراقبين
المراقبين

تاريخ التسجيل : 18/02/2011
المساهمات : 117
النقاط : 185
التقيم : 6
الدولة : مصر
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: الداتا قريد DataGridview فى بيئة vb.net(إضافة ، حذف ، تعديل ، طباعة)

مُساهمة من طرف صالح الشنطى في الأحد مارس 27, 2016 8:54 pm

شكرا غلى الشرح

صالح الشنطى
.
.

تاريخ التسجيل : 20/11/2015
المساهمات : 2
النقاط : 2
التقيم : 0
الدولة : ليبيا
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: الداتا قريد DataGridview فى بيئة vb.net(إضافة ، حذف ، تعديل ، طباعة)

مُساهمة من طرف sabmov في الإثنين نوفمبر 21, 2016 12:39 pm

اخى الكريم .. اشكرك على جهدك الرائع
اى الصور لا تظهر 
ما الفرق بين visual basicdt net 2010  و برنامج visual stoudi 2010

sabmov
.
.

تاريخ التسجيل : 19/11/2016
المساهمات : 2
النقاط : 2
التقيم : 0
الدولة : مصر
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: الداتا قريد DataGridview فى بيئة vb.net(إضافة ، حذف ، تعديل ، طباعة)

مُساهمة من طرف sabmov في الإثنين نوفمبر 21, 2016 12:40 pm

اخى الكريم ... اين المرفق

sabmov
.
.

تاريخ التسجيل : 19/11/2016
المساهمات : 2
النقاط : 2
التقيم : 0
الدولة : مصر
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى