Showing posts with label Data Grid View (Arabic - عربي). Show all posts
Showing posts with label Data Grid View (Arabic - عربي). Show all posts

التعامل مع DataGridView باستخدام C#


افترض ان الـ DataGridView  المستخدمه في الشرح التالي تتكون من  اعمدة تأخد الاسامي Column1 و Column2 .. 

1 – الانتقال الي خلية محددة -  Move to specific Cell


        
-          عن طريق تحديد رقم الخلية ورقم الصف

            dataGridView1.CurrentCell =dataGridView1.Rows[0].Cells[1];

في الكود السابق تم الانتقال للخلية الثانية في الصف الاول من  DataGridView

يمكن الاستعانه باسم العمود كالتالي
 dataGridView1.CurrentCell =
 dataGridView1.Rows[0].Cells[Column2.Index];




-          وللانتقال للخلية في نفس الصف
dataGridView1.CurrentCell =     dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[Column4.Index];


-          وللانتقال للخلية التاليه في نفس الصف

dataGridView1.CurrentCell =
dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[dataGridView1.CurrentCell.ColumnIndex + 1];

ولتفادي الخروج عن عدد الخلايا  - Out Of Range في الكود السابق


if (dataGridView1.CurrentCell.ColumnIndex != Column4.Index)
            {
dataGridView1.Rows[dataGridView1.CurrentRow.Index]
.Cells[dataGridView1.CurrentCell.ColumnIndex + 1];
            }
else
            {
dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[0];
            }
 ---------------------------------------------------------------------------------------------------------------------------------

2 – معرفة قيمة خليه محدده -  Value of  specific Cell

-          نفس الكود السابقة باضافه الخاصية .Value يعد تحديد موقع الخلية

string MyCellValue =(string)dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[Column2.Index].Value;

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

3 – استخدام  foreach مع DataGridView  
  

يمكن استخدام  foreach من اجل معرفة قيمة كل الخلايا في عمود معين واستخدامها في مصفوفه او لارسالها الي قاعدة البيانات :

string[] array = new string[dataGridView1.Rows.Count - 1];
foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                if (!row.IsNewRow)
                {
                    array[row.Index] = (string)row.Cells[Column2.Index].Value;
                    MessageBox.Show(array[row.Index]);
                }
            }


فيجوال سي شارب 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);
                }
            }
        }

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