تقييم الموضوع :
  • 3 أصوات - بمعدل 5
  • 1
  • 2
  • 3
  • 4
  • 5
RE: مشروع للتعامل مع قاعدة بيانات DataGridView باللغتين VB و#C
#11
تسلم ياكبير بجد هيفيد ناس كتير Smile
الرد }}}
تم الشكر بواسطة: sendbad100
#12
شكرا جزيلا وفي ميزان حسناتك ان شاء الله
الرد }}}
تم الشكر بواسطة:
#13
(19-11-15, 02:16 PM)مهموم كتب : السلام عليكم ورحمة الله

أخي أبو ليث

أشكر لكم ثقتكم.
الرد }}}
تم الشكر بواسطة:
#14
يعطيك العافية
على
الطرح الطيب


لاكن تبقى في المشروع
الإضافة
التعديل
الحذف


مع الشكر

ارجو فتح استقبال الرسائل يامهموم
الرد }}}
تم الشكر بواسطة:
#15
عمل رائع
مشكور
الرد }}}
تم الشكر بواسطة: gharib , gharib
#16
(19-11-15, 01:11 PM)مهموم كتب : السلام عليكم ورحمة الله


مشروع للتعامل مع قاعدة بيانات بها ثلاث جداول بينهم علاقات، مع إمكانية:
الإضافة
التعديل
الحذف
البحث


الخطوة الأولى: عمل قاعدة بيانات Microsoft Access بإسم Database1.accdb ونحفظه في مجلد المستندات وبه الجداول والأعمدة التالية:

جدول الموظفين Employees والأعمده هي:
رقم الموظف Emp_ID نوع ترقيم تلقائي ومفتاح أساسي
إسم الموظف Emp_Name نوع نص
رقم الفرع Brn_ID نوع رقم
رقم القسم Dpt_ID نوع رقم

جدول الفروع Branches والأعمده هي:
رقم الفرع Brn_ID نوع ترقيم تلقائي ومفتاح أساسي
إسم الفرع Brn_Name نوع نص

جدول الأقسام Departments والأعمده هي:
رقم القسم Dpt_ID نوع ترقيم تلقائي ومفتاح أساسي
إسم القسم Dpt_Name نوع نص

إنشاء علاقات بين الجداول الثلاث كالتالي:
Employees.Brn_ID = Branches.Brn_ID
Employees.Dpt_ID = Departments.Dpt_ID

ونحن داخل Microsoft Access نقوم بإضافة بعض البيانات في جدول الفروع Branches وجدول الأقسام Departments


الخطوة الثانية: عمل مشروع Visual Basic جديد

إضافة قاعدة البيانات Database1.accdb للمشروع:
من القائمة Project نختار Add Existing Item ستفتح نافذة تحديد الملفات
ولنستطيع مشاهدة ملفات قاعدة البيانات لابد من تغيير نوع عرض الملفات إلى Data Files، ثم نبحث عن الملف ونحدده ونضغط Add،
وبما أن الملف الذي اخترناه هو قاعدة بيانات فستفتح لنا نافذة معالج إعداد مصدر البيانات Data Source Configuration Wizard،
نحدد من النماذج المعروضة (وفي الغالب هو نموذج واحد Dataset مع ال Access) النموذج Dataset ونضغط التالي Next،
سننتقل للصفحة التالة للمعالج وهي تحديد كائنات من قاعدة البيانات وغالباً سنؤشر على الجداول فقط Tables والتي
تشمل الثلاث جداول Branches وDepartments وEmployees، وسنترك الإسم الإفتراضي Database1DataSet كما هو ثم نضغط إنهاء Finish.

سنجد أنه تم إضافة الملفات التالية للمشروع:
app.config ويحتوى على معلومات عن الإتصال قاعدة البيانات.
Database1.accdb وهو ملف قاعدة البيانات.
Database1DataSet.xsd وهو يحتوى على مخطط للجداول مع العلاقات التي بينهم (بإمكانك فتحه بالنقر مرتين عليه لمشاهدت ما فيه من باب العلم)

نأتي للنموذج Form1:
نقوم بإضافة الأداة DataGridView1 ونقوم بربطها بالجداول كالتالي:

نحدد الأداة DataGridView1 ثم نضغط على السهم الصغير الموجود في ركن الأداة DataGridView1
وستفتح لنا Choose Data Source
ونقوم بفتح الشجرة Other Data Sources حتى نشاهد الثلاث جدوال السابقة
ونختار الجدول Employees
وسوف نشاهد أن أعمدة الجدول ظهرت في أداة DataGridView1،

وسنجد أن العمودين Brn_ID وDpt_ID ظهرا على أساس نوع TextBox
وسنقوم بتغييرهم إلى نوع ComboBox في الخطوة التالية.

لتغيير نوع عمود الفرع Brn_ID من نوع TextBox إلى نوع ComboBox بحيث يحتوي على أسماء الفروع من الجدول Branches نقوم بالتالي:

نحدد الأداة DataGridView1 ثم نضغط على السهم الصغير الموجود في ركن الأداة DataGridView1 ونضغط على تعديل الأعمدة Edit Columns،
من نافذة تعديل الأعمدة نحدد العمود Brn_ID فتظهر خصائصه،

نذهب للخاصية Column Type ونغيره من DataGridViewTextBoxColumn إلى DataGridViewComboBoxColumn
فتظهر لنا بعض الخصائص الإضافية التي لم تكن موجودة قبل هذا التغيير،

نذهب للخاصية DataSource ونفتح بالترتيب Other Data Sources ثم Project Data Sources ثم Database1DataSet
وستظهر فيها الثلاث جداول ونختار جدول الفروع Branches،

نذهب للخاصية DisplayMember ونختار منها Brn_Name،

نذهب للخاصية ValueMember ونختار منها Brn_ID،

نذهب للخاصية HeaderText ونغيره إلى Branch.

لتغيير نوع عمود القسم Dpt_ID من نوع TextBox إلى نوع ComboBox بحيث يحتوي على أسماء الأقسام من الجدول Departments نقوم بالتالي:

نحدد الأداة DataGridView1 ثم نضغط على السهم الصغير الموجود في ركن الأداة DataGridView1 ونضغط على تعديل الأعمدة Edit Columns،
من نافذة تعديل الأعمدة نحدد العمود Dpt_ID فتظهر خصائصه،

نذهب للخاصية Column Type ونغيره من DataGridViewTextBoxColumn إلى DataGridViewComboBoxColumn
فتظهر لنا بعض الخصائص الإضافية التي لم تكن موجودة قبل هذا التغيير،

نذهب للخاصية DataSource ونفتح بالترتيب Other Data Sources ثم Project Data Sources ثم Database1DataSet
وستظهر فيها الثلاث جداول ونختار جدول الأقسام Departments،

نذهب للخاصية DisplayMember ونختار منها Dpt_Name،

نذهب للخاصية ValueMember ونختار منها Dpt_ID،

نذهب للخاصية HeaderText ونغيره إلى Department.

ويمكنك تغيير اسماء الأعمدة التي تظهر في الأداة DataGridView1 عن طريق الخاصية HeaderText لكل عمود.

الأن لو فتحنا نافذة الكود الخاص بالنموذج Form1 فسنجد أن المعالج أضاف ثلاث أسطر في حدث تحميل النموذج Form1_Load وهي أسطر قراءة الجداول الثلاث
VB
PHP كود :
Private Sub Form1_Load(ByVal sender As System.ObjectByVal e As System.EventArgsHandles MyBase.Load

    Me
.DepartmentsTableAdapter.Fill(Me.Database1DataSet.Departments)
 
   Me.BranchesTableAdapter.Fill(Me.Database1DataSet.Branches)
 
   Me.EmployeesTableAdapter.Fill(Me.Database1DataSet.Employees)

End Sub 
#C
PHP كود :
private void Form1_Load(object senderEventArgs e) {

 
   this.departmentsTableAdapter.Fill(this.database1DataSet.Departments);
 
   this.branchesTableAdapter.Fill(this.database1DataSet.Branches);
 
   this.employeesTableAdapter.Fill(this.database1DataSet.Employees);




دعونا نقوم الآن بتجربة نجاح الربط فقط، وذلك بتشغيل المشروع ومشاهدة الأعمدة Branches وDepartments وهي تحتوي على اسماء كل منهم،
وذلك للإطمئنان على سير العمل بشكل صحيح،
ولكن حتى الآن لن يتم حفظ أي بيانات يتم إضافتها في الأداة DataGridView1،
ونقوم بعمل كود الحفظ (وهو سطر واحد فقط) في الخطوة التالية.

تحديث قاعدة البيانات:

إن اعتماء كل العمليات التي يتم إجراءها على الأداة DataGridView1 من إضافة وتعديل وحذف
تتم بهذا السطر فقط (مع ملاحظة إسم الجدول Employees والأمر Update)
VB
PHP كود :
Me.EmployeesTableAdapter.Update(Me.Database1DataSet.Employees
#C
PHP كود :
this.employeesTableAdapter.Update(this.database1DataSet.Employees); 

ولك الخيار بين أن تضعه في زر Button بإسم [تحديث] أو أن تضعه في حدث إغلاق النموذج Form1_FormClosing
وسأفترض أنك اخترت حدث إغلاق النموذج Form1_FormClosing

نأتي للخطوة الأخير وهي طريقة البحث:
نضيف أداة TextBox1 لكتابة الإسم المراد البحث عنه وButton1 لتنفيذ أمر البحث وعرض النتائج وButton2 لإعادة الوضع كما كان قبل البحث أو ما يسمى Reset.

الأسلوب الحديث في البحث بشكل عام هو استخدام تقنية Linq الخاصة من Microsoft.

هناك عدة رغبات في مسألة البحث عن نصوص وهي أربع حالات،
وكانت في السابق تستخدم % مع الأمر Like في جمل Sql كالتالي:
إذا كان الجزء المراد البحث عنه في بداية المعلومات كانت توضع العلامة % قبل مع الأمر LIKE.
إذا كانت الجزء المراد البحث عنه في وسط المعلومات كانت توضع العلامة % قبل وبعد مع الأمر LIKE.
إذا كانت الجزء المراد البحث عنه في آخر المعلومات كانت توضع العلامة % بعد مع الأمر LIKE.
إذا كانت المراد البحث عنه تطابق تام مع المعلومات كانت تستخدم العلامة = بدلا من الأمر LIKE وبدون العلامة %.

ولكن طريقة البحث مع تقنية Linq مختلفة وسهلة جداً وكأنك تبحث في مغير نصي كالتالي:
إذا كان الجزء المراد البحث عنه في بداية المعلومات نستخدم الأمر StartsWith.
إذا كانت الجزء المراد البحث عنه في وسط المعلومات نستخدم Contains.
إذا كانت الجزء المراد البحث عنه في آخر المعلومات نستخدم الأمر EndsWith.
إذا كانت المراد البحث عنه تطابق تام مع المعلومات نستخدم الأمر Equals.

ويمكن استخدام العلامة = في حالة المراد التطابق التام.

نأتي للمشروع، سنفترض أن الرغبة في أسلوب البحث عن المطلوب يكون البحث عن الأسماء التي تحتوي نصاً معيناً،
فسنكتب هذا الكود في الزر Button1
VB
PHP كود :
Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles Button1.Click

    DataGridView1
.DataSource Me.Database1DataSet.Employees.Where(Function(xx.Emp_Name.Contains(TextBox1.Text)).ToList

End Sub 
#C
PHP كود :
private void button1_Click(object senderEventArgs e) {

 
   dataGridView1.DataSource this.database1DataSet.Employees.Where(=> x.Emp_Name.Contains(textBox1.Text)).ToList();



وبالنسبة لإعادة إظهاء جميع الأسماء كما كانت قبل البحث نكتب هذا الكود في الزر Button2
VB
PHP كود :
Private Sub Button2_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles Button2.Click

    Me
.DataGridView1.DataSource Me.Database1DataSet.Employees

End Sub 
#C
PHP كود :
private void button2_Click(object senderEventArgs e) {

 
   this.dataGridView1.DataSource this.database1DataSet.Employees;



ويمكن إجراء بحث آخر دون الحاجة لإعادة إظهار جميع الأسماء الناتجة من بحث سابق.


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

وهذا كامل كود النموذج Form1
VB
PHP كود :
Public Class Form1


    Private Sub Form1_Load
(ByVal sender As System.ObjectByVal e As System.EventArgsHandles MyBase.Load

        Me
.DepartmentsTableAdapter.Fill(Me.Database1DataSet.Departments)
 
       Me.BranchesTableAdapter.Fill(Me.Database1DataSet.Branches)
 
       Me.EmployeesTableAdapter.Fill(Me.Database1DataSet.Employees)

 
   End Sub

    Private Sub Form1_FormClosing
(ByVal sender As ObjectByVal e As System.Windows.Forms.FormClosingEventArgsHandles Me.FormClosing

        Me
.EmployeesTableAdapter.Update(Me.Database1DataSet.Employees)

 
   End Sub


    Private Sub Button1_Click
(ByVal sender As System.ObjectByVal e As System.EventArgsHandles Button1.Click

        DataGridView1
.DataSource Me.Database1DataSet.Employees.Where(Function(xx.Emp_Name.Contains(TextBox1.Text)).ToList

    End Sub


    Private Sub Button2_Click
(ByVal sender As System.ObjectByVal e As System.EventArgsHandles Button2.Click

        Me
.DataGridView1.DataSource Me.Database1DataSet.Employees

    End Sub


End 
Class 
#C
PHP كود :
public partial class Form1 Form
{
 
   public Form1() {
 
       InitializeComponent();
 
   }


 
   private void Form1_Load(object senderEventArgs e) {

 
       this.departmentsTableAdapter.Fill(this.database1DataSet.Departments);
 
       this.branchesTableAdapter.Fill(this.database1DataSet.Branches);
 
       this.employeesTableAdapter.Fill(this.database1DataSet.Employees);

 
   }


 
   private void Form1_FormClosing(object senderFormClosingEventArgs e) {

 
       this.employeesTableAdapter.Update(this.database1DataSet.Employees);

 
   }


 
   private void button1_Click(object senderEventArgs e) {

 
       dataGridView1.DataSource this.database1DataSet.Employees.Where(=> x.Emp_Name.Contains(textBox1.Text)).ToList();

 
   }


 
   private void button2_Click(object senderEventArgs e) {

 
       this.dataGridView1.DataSource this.database1DataSet.Employees;

 
   }





إختفاء البيانات:
قد يلاحظ البعض أن أي تعديل في المشروع ينتج عنه اختفاء ما تم إضافته من بيانات في قاعدة البيانات قبل التعديل في المشروع،
ولتعطيل هذا الإختفاء نقوم بالتالي:
نحدد من ملفات المشروع ملف قاعدة البيانات Database1.accdb فتظهر لنا خصائص خاصة بالملف،
نذهب للخاصية Copy to Ouput Directory ونختار Copy if newer.

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


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


إن كانت الإدارة ترى أن هذه المشاركة فيها من الفائدة ما تستحق أن توضع في موضوع مستقل مع التعديل بما تراه مناسباً فلها ذلك مع شكري وتقديري.


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

اللهم اني قد نذرت نفسي لمساعدت الاخرين فوفقني وكن لي معين
جاهز لمساعدة اي حد يحتاج لمساعدتي
طبيب اعشق البرمجة . 
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  اتصال قاعدة البيانات بالسرفر atefkhalf2004 10 318 25-02-24, 09:15 PM
آخر رد: atefkhalf2004
  انشاء قاعدة بيانات اكسس بالكود Kamil 0 178 17-02-24, 10:43 PM
آخر رد: Kamil
  [مثال] مثال لنسخ وإستعادة قاعدة البيانات ( تحديث) نسخ تلقائي للقاعدة حسب اليوم والساعة جميل علي 81 48,096 10-02-24, 11:26 AM
آخر رد: محمد العموري
  [مشروع] مشروع ادارة المراكز الطبية رضوان الجماعي 8 3,161 20-12-23, 06:30 AM
آخر رد: Taha Okla
  طريقة سهلة للاتصال بقاعدة بيانات SQL مع اضافة ايقونات للتحكم في تدفق البيانات ggtt17121985 0 541 06-11-23, 10:16 AM
آخر رد: ggtt17121985
Brick [VB.NET] مشروع بسيط يحتوي على مجموعة من الأمثلة المفيدة لتعليم البرمجة بلغة VB.NET musalem 1 906 17-08-23, 12:07 PM
آخر رد: تركي احمد
Brick [VB.NET] سورس كود LCD CLOCKZ هو مشروع لساعة ديجيتال بشكل مميز وجذاب musalem 0 532 04-07-23, 02:08 AM
آخر رد: musalem
  [مشروع] مشروع إدارة الأقساط قابل للتعديل musalem 5 871 17-06-23, 09:59 AM
آخر رد: atefkhalf2004
  مشروع تعدد لغات للبرنامج من قاعدة بيانات MsAccess asemshahen5 6 3,652 18-05-23, 03:39 AM
آخر رد: mohamed gida
Wink [مشروع] مشروع تصميم فورم بشكل جديد بالفيجوال ستوديو مع السورس كود ahmadpal 8 6,993 12-04-23, 11:41 PM
آخر رد: spiky

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم