فيجوال سي شارب VC# استخدام خاصية الاكمال التلقائي AutoComplete للـ ComboBox مع DataGridView واستدعاء البيانات من SQL Server db



اولا تقوم بانشاء الاعمده بالضغط علي  Edit Columans من DataGridView Tasks كما موضع بالشكل

ثم نقوم بالضغط علي Add  من مربع الحوار الذي سيظهر امامك وكما موضح بالشكل التالي نقوم بكتابه اسم العمود واختيار النوع "Type" DataGridViewComboBoxColumn  ثم نقوم بكتابه اسم العمود الذي سيظهر للمستخدم

بعد الضغط علي Add نقوم باختيار NoThing  من الخاصية DisplayStyle في Column Properties كما هو موضح بالشكل التالي :

بعد الضغط علي Ok , من DatagridView Properties  نقوم باضافه الحدث  EditingControlShowin بالضغط عليه بالماوس ليقوم بنقلنا الي الكود



وسيكون شكل الـ Event  المحتوي للكود كالتالي :

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
          
        }
نقوم بالاعلان عن ComboBox  قبل كتابه الكود وايضا استخدام المجال System.Data.SqlClient
ليكون شكل الكود في النهاية كالتالي :

----------------------------------------------------------------------------------------------------------------------------------------------------------------

using System;
using System.Data;
using System.Data.SqlClient;

ComboBox DataGridProductCombo;

 private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            if (dataGridView1.CurrentCell.ColumnIndex == ColProduct.Index)
            {
                using (SqlConnection MyConn = new SqlConnection(connString))
                {
                    MyConn.Open();
                   DataSet Datset = new DataSet();
                   SqlDataAdapter Adapter = new SqlDataAdapter("if exists( Select ProName     From Products) Select ProName From Products else select Null as ProName", MyConn);
                    Adapter.Fill(DatSet, "Products");
                    MyConn.Close();
                }
                DataGridProductCombo = (ComboBox)e.Control;
                DataGridProductCombo.DropDownStyle = ComboBoxStyle.DropDown;
                DataGridProductCombo.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
                DataGridProductCombo.AutoCompleteSource = AutoCompleteSource.ListItems;
                DataGridProductCombo.DataSource = DatSet.Tables["Products"];
                DataGridProductCombo.ValueMember = "ProName";
                DataGridProductCombo.DisplayMember = "ProName";

            }
        }
------------------------------------------------------------------------------------------------------------------------------------------------------------------

نقوم باضافه الحدث CellValidating بنفس طريقة اضافه الحدث السابق EditingControlShowing

ثم نقوم بكتابه الكود ليكون كالتالي
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {
            if (e.ColumnIndex == ColProduct.DisplayIndex)
            {
                if (!ColProduct.Items.Contains(e.FormattedValue))
                {
                    ColProduct.Items.Add(e.FormattedValue);
                }
            }
        }

----------------------------------------------------------------------------------------------------------------------------------------------------------------
من المفترض ان تكون النتيجة كما بالشكل ادناه