Imports System.Data.OleDb
Public Class frmMain
Private Sub btnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClose.Click
Me.Close()
End Sub
Private Sub btnNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNew.Click
frmNew.ShowDialog()
End Sub
Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' تجهيز الداتاقريدفيو
With dgvList
.DataSource = Nothing
.Rows.Clear()
.ColumnCount = 3
' رأس العمود
.Columns(0).HeaderText = "ID"
' اتساع العمود
.Columns(0).Width = 30
' محاذات محتويات الخلية
.Columns(0).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
' محاذاة عنوان العمود
.Columns(0).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
' رأس العمود
.Columns(1).HeaderText = "الاســـــــم"
' اتساع العمود
.Columns(1).Width = 150
' محاذاة عنوان العمود
.Columns(1).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
' رأس العمود
.Columns(2).HeaderText = "تاريخ الميلاد"
' اتساع العمود
.Columns(2).Width = 110
' محاذاة عنوان العمود
.Columns(2).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
' لجعل الخلية تعرض التاريخ فقط
.Columns(2).DefaultCellStyle.Format = "d"
End With
LoadData()
End Sub
Public Sub LoadData()
Dim LSQL As String = "select * from TheTable order by ID"
Dim LAdapter As New OleDbDataAdapter(LSQL, Con)
Dim LDataSet As New DataSet
Dim RowsCount As Integer
Dim i As Integer
' مسح الداتاقريدفيو من قيم سابقة محتملة
dgvList.Rows.Clear()
' وهنا نفحص هل هناك اتصال بقاعدة البيانات ام لا
' وهذه خطوة مهمة جداً ويجب اتباعها دائماً
' قبل أن تفعل أي شيء تأكد من حالة الاتصال بقاعدة البيانات
If Con.State = ConnectionState.Closed Then
' لا يوجد اتصال بقاعدة البيانات
Con.Open()
LAdapter.Fill(LDataSet, "LoadingData")
RowsCount = LDataSet.Tables("LoadingData").Rows.Count
If RowsCount = 0 Then
' يتم فحص السجلات المسترجعة من جمل اس كيو ال، فإن كان عددها صفرا
' معناها لا يوجد سجلات والجدول فارغ
' فيتم إغلاق الاتصال وعدم عرض اي شيء
dgvList.Rows.Clear()
LDataSet.Reset()
Con.Close()
Exit Sub
Else
' وإلا، فيتم مسح القائمة من سجلات سابقة وتعبئتها مجددا
' الأمر التالي لإفساح المجال لعرض السجلات المسترجعة
' يعني ادراج عدد من الاسطر في القائمة مساوي لعدد السجلات المسترجعة
dgvList.Rows.Add(RowsCount)
' هذه هي عملية تعبئة البيانات من الداتاسيت إلى الداتاقريد فيو
For i = 0 To RowsCount - 1
With dgvList
.Rows(i).Cells(0).Value = LDataSet.Tables("LoadingData").Rows(i).Item("ID")
.Rows(i).Cells(1).Value = LDataSet.Tables("LoadingData").Rows(i).Item("TheName")
.Rows(i).Cells(2).Value = LDataSet.Tables("LoadingData").Rows(i).Item("TheBirthDate")
End With
Next
LDataSet.Reset()
Con.Close()
End If
Else
' الاتصال مفتوح مسبقاً بقاعدة البيانات
LAdapter.Fill(LDataSet, "LoadingData")
RowsCount = LDataSet.Tables("LoadingData").Rows.Count
If RowsCount = 0 Then
dgvList.Rows.Clear()
LDataSet.Reset()
Con.Close()
Exit Sub
Else
dgvList.Rows.Add(RowsCount)
' Now: fill DGV with data
For i = 0 To RowsCount - 1
With dgvList
.Rows(i).Cells(0).Value = LDataSet.Tables("LoadingData").Rows(i).Item("ID")
.Rows(i).Cells(1).Value = LDataSet.Tables("LoadingData").Rows(i).Item("TheName")
.Rows(i).Cells(2).Value = LDataSet.Tables("LoadingData").Rows(i).Item("TheBirthDate")
End With
Next
LDataSet.Reset()
Con.Close()
End If
End If
End Sub
Private Sub btnEdit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEdit.Click
' برمجة الزر تعديل
' وهنا نفحص قائمة المشتركين، إن كانت فارغة يتم عرض رسالة تفيد ذلك
' وإلا فيتم عرض فورم تعديل السجل المختار وتحديث قاعدة البيانات والداتاقريدفيو
If dgvList.Rows.Count < 2 Then
MsgBox("القائمة فارغة", MsgBoxStyle.Critical, "عذراً")
ElseIf dgvList.SelectedRows(0).Cells(0).Value = Nothing Then
MsgBox("يجب اختيار سجل لتعديله", MsgBoxStyle.Critical, "عذراً")
Else
With frmEdit
.RecID = Val(dgvList.SelectedRows(0).Cells(0).Value)
.TheName = dgvList.SelectedRows(0).Cells(1).Value
.TheBirthDate = dgvList.SelectedRows(0).Cells(2).Value
.ShowDialog()
End With
End If
End Sub
Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelete.Click
' برمجة الزر حذف
' وهنا نفحص قائمة المشتركين، إن كانت فارغة يتم عرض رسالة تفيد ذلك
' وإلا فيتم حذف السجل المختار وتحديث قاعدة البيانات والداتاقريدفيو
If dgvList.Rows.Count < 2 Then
MsgBox("القائمة فارغة", MsgBoxStyle.Critical, "عذراً")
Else
Dim RecID As Integer
Dim Answer As Integer
RecID = Val(dgvList.SelectedRows(0).Cells(0).Value)
If RecID = Nothing Then
MsgBox("لم تقم باختيار سجل لحذفه", MsgBoxStyle.Critical, "عذراً")
Else
Answer = MsgBox("هل تريد فعلاً حذف هذا السجل", MsgBoxStyle.Question + MsgBoxStyle.OkCancel, "تنبيه")
If Answer = MsgBoxResult.Ok Then
Dim DelSQl As String = "DELETE * FROM TheTable WHERE ID=" & RecID & ""
Dim DelCMD As New OleDbCommand
If Con.State = ConnectionState.Closed Then
Con.Open()
With DelCMD
.Connection = Con
.CommandType = CommandType.Text
.CommandText = DelSQl
.ExecuteNonQuery()
.Dispose()
End With
Con.Close()
LoadData()
Else
With DelCMD
.Connection = Con
.CommandType = CommandType.Text
.CommandText = DelSQl
.ExecuteNonQuery()
.Dispose()
End With
Con.Close()
LoadData()
End If
End If
End If
End If
End Sub
Private Sub txtSearch_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtSearch.TextChanged
SearchByName()
End Sub
Private Sub SearchByName()
' جملة الاستعلام التالية تبحث وتجلب السجلات التي تتطابق فيها حروف البحث مع حقل الاسم
' في كل مرة يتم كتابة حرف يتم تنفيذها وتنفيذ باقي الكود
Dim LSQL As String = "select * from TheTable where TheName like '%" & txtSearch.Text & "%' order by ID"
Dim LAdapter As New OleDbDataAdapter(LSQL, Con)
Dim LDataSet As New DataSet
Dim RowsCount As Integer
Dim i As Integer
' مسح الداتاقريدفيو من قيم سابقة محتملة
dgvList.Rows.Clear()
If Con.State = ConnectionState.Closed Then
Con.Open()
LAdapter.Fill(LDataSet, "LoadingData")
RowsCount = LDataSet.Tables("LoadingData").Rows.Count
If RowsCount = 0 Then
dgvList.Rows.Clear()
LDataSet.Reset()
Con.Close()
Exit Sub
Else
dgvList.Rows.Add(RowsCount)
' Now: fill DGV with data
For i = 0 To RowsCount - 1
With dgvList
.Rows(i).Cells(0).Value = LDataSet.Tables("LoadingData").Rows(i).Item("ID")
.Rows(i).Cells(1).Value = LDataSet.Tables("LoadingData").Rows(i).Item("TheName")
.Rows(i).Cells(2).Value = LDataSet.Tables("LoadingData").Rows(i).Item("TheBirthDate")
End With
Next
LDataSet.Reset()
Con.Close()
End If
Else
LAdapter.Fill(LDataSet, "LoadingData")
RowsCount = LDataSet.Tables("LoadingData").Rows.Count
If RowsCount = 0 Then
dgvList.Rows.Clear()
LDataSet.Reset()
Con.Close()
Exit Sub
Else
dgvList.Rows.Add(RowsCount)
' Now: fill DGV with data
For i = 0 To RowsCount - 1
With dgvList
.Rows(i).Cells(0).Value = LDataSet.Tables("LoadingData").Rows(i).Item("ID")
.Rows(i).Cells(1).Value = LDataSet.Tables("LoadingData").Rows(i).Item("TheName")
.Rows(i).Cells(2).Value = LDataSet.Tables("LoadingData").Rows(i).Item("TheBirthDate")
End With
Next
LDataSet.Reset()
Con.Close()
End If
End If
End Sub
End Class