الداتا قريد DataGridview فى بيئة vb.net(إضافة ، حذف ، تعديل ، طباعة)
صفحة 1 من اصل 1 • شاطر
الداتا قريد DataGridview فى بيئة vb.net(إضافة ، حذف ، تعديل ، طباعة)
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).
تم الانتهاء بحمد الله....
الغرض من هذا الشرح هو كيفية التعامل مع الداتا قريد و لم يتم الخوض في شرح
كيفية الاتصال بقاعدة البيانات لأنها شرحت من قبل في هذا المنتدى كما تم
ارفاق المثال كاملاً للرجوع
إلية عند الحاجة . و أحب أن أعتذر عن أي خطأ او قصور في الشرح و من لديه ملاحظات أو اضافات يضعها ليستفيد الجميع منها ..
و أشكر اختى العزيزة التي ساعدتني في مادة هذا الدرس.
دمتم في رعاية الرحمن
المصدر / [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]
ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
رد: الداتا قريد DataGridview فى بيئة vb.net(إضافة ، حذف ، تعديل ، طباعة)
بدأتم فى الدوت نت من غيرى يا خونه ............هههههههههههههههههه مش قلنا هنعمل دورة كاملة
VB.NET- المراقبين
- تاريخ التسجيل : 18/02/2011
المساهمات : 121
النقاط : 189
التقيم : 6
الدولة :
الجنس :
صالح الشنطى- .
- تاريخ التسجيل : 20/11/2015
المساهمات : 2
النقاط : 2
التقيم : 0
الدولة :
الجنس :
رد: الداتا قريد DataGridview فى بيئة vb.net(إضافة ، حذف ، تعديل ، طباعة)
اخى الكريم .. اشكرك على جهدك الرائع
اى الصور لا تظهر
ما الفرق بين visual basicdt net 2010 و برنامج visual stoudi 2010
اى الصور لا تظهر
ما الفرق بين visual basicdt net 2010 و برنامج visual stoudi 2010
sabmov- .
- تاريخ التسجيل : 19/11/2016
المساهمات : 5
النقاط : 11
التقيم : 0
الدولة :
الجنس :
رد: الداتا قريد DataGridview فى بيئة vb.net(إضافة ، حذف ، تعديل ، طباعة)
اخى الكريم ... اين المرفق
sabmov- .
- تاريخ التسجيل : 19/11/2016
المساهمات : 5
النقاط : 11
التقيم : 0
الدولة :
الجنس :
رد: الداتا قريد DataGridview فى بيئة vb.net(إضافة ، حذف ، تعديل ، طباعة)
موضوع جميل
بارك الله فيك ، ولك ألف شكر
ولكن موجودة فى أحد حقول جدول بقاعدة بيانات
أريد أن يعرض هذا العمود لكل سجل(لكل خلية) قيمة هذه الخلية فى جدول قاعدة البيانات كما يحدث مع باقى أعمدة الDataGridView التى ليست من النوع الComboBoxColumn
ولكم ألف شكر
بارك الله فيك ، ولك ألف شكر
وكيف يمكن تعبئة هذا الحقل (رقم العمود ورقم الخلية) بقيمة لا يدخلها المستخدم وليست مكتوبة فى الكود ". . ."لتعبئة هذا الحقل بقيمة معينة نستخدم رقم العمود :
مثال : في الصورة السابقة يكون رقم العمود 4 لأننا العد بيدأ من الصفر ( الرقم ، الأسم ، العنوان ، المدينة ، اسم العمود):
- الكود:
DGview.Item(رقم العمود, رقم الخلية).Value =”. . .”
ولكن موجودة فى أحد حقول جدول بقاعدة بيانات
أريد أن يعرض هذا العمود لكل سجل(لكل خلية) قيمة هذه الخلية فى جدول قاعدة البيانات كما يحدث مع باقى أعمدة الDataGridView التى ليست من النوع الComboBoxColumn
ولكم ألف شكر
اسلام الكبابى- ...
- تاريخ التسجيل : 16/02/2017
المساهمات : 42
النقاط : 92
التقيم : 0
الدولة :
الجنس :
رد: الداتا قريد DataGridview فى بيئة vb.net(إضافة ، حذف ، تعديل ، طباعة)
لم أجد أى رد على سؤالى حتى الآن
لا من الأستاذ/أحمد مناع ولا من أى أحد يفهم فى موضوع الربط بين الComboBoxColumn وبين قاعدة البيانات
ولكم ألف شكر
لا من الأستاذ/أحمد مناع ولا من أى أحد يفهم فى موضوع الربط بين الComboBoxColumn وبين قاعدة البيانات
ولكم ألف شكر
اسلام الكبابى- ...
- تاريخ التسجيل : 16/02/2017
المساهمات : 42
النقاط : 92
التقيم : 0
الدولة :
الجنس :
| |
صفحة 1 من اصل 1
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى
أمس في 4:45 pm من طرف moslema_r
» 7 دراسات تقدمها أبرز شركات دراسة جدوى في الرياض لدراسة وتحليل مشروعك
أمس في 4:39 pm من طرف moslema_r
» استثمارات واعدة في القطاع الصحي مع أفضل شركة دراسة جدوى معتمدة في الإمارات
أمس في 4:33 pm من طرف moslema_r
» أفضل مكتب استشارات اقتصادية في قطر: دليل شامل لاختيار الشريك الأمثل
أمس في 4:28 pm من طرف moslema_r
» استثمر بثقة مع أفضل مكتب استشارات اقتصادية في عمان
أمس في 4:22 pm من طرف moslema_r
» ما هي المصانع المربحة؟
أمس في 3:57 pm من طرف moslema_r
» أفضل مكتب دراسات جدوى في البحرين الشريك الاستثماري الأفضل لك
أمس في 3:46 pm من طرف moslema_r
» أفكار مشاريع صغيرة مربحة جدا وغير مكلفة يمكنك البدء بها اليوم
أمس في 3:40 pm من طرف moslema_r
» برمجة وتصميم تطبيق جوال لنادى رياضي
أمس في 3:33 pm من طرف moslema_r
» تصميم تطبيق جوال لتوصيل الطلبات
أمس في 3:27 pm من طرف moslema_r