منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : عمل كلاس لتعبئه كمبو بوكس داخل الداتا فيو
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2 3 4
السلام عليكم ورحمة الله تعالى وبركاته
اساتذتى الكرام
ارجو مساعدتى فى تنفيذ هذ الطلب

يوجد Class يعمل على مستوى المشروع كاملا لتعبئه اي كمبو بوكس من قااعدة البيانات
وهو كلاتى 



كود :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Windows.Forms;
using System.Data;


namespace ComBobx
{
   public static class DB
   {
       private static string constring = @"Data Source=.\SQLEXPRESS;Initial Catalog=Data_Company;Integrated Security=True";
       public static SqlConnection Con = new SqlConnection(constring);

       public static void openDB()
       {
           if (Con.State == ConnectionState.Open)
           {
               Con.Close();
           }
           Con.Open();

       } // [فتح الاتصال بقاعدة البيانات]


       // ------------------[تعبئة كمبو بوكس]-------------------
       public static void FillComBobx(ComboBox Cmd, string Sql, string displayCol, string valueCol)
       {
           SqlDataAdapter Da = new SqlDataAdapter(Sql, Con);
           DataSet Ds = new DataSet();
           Da.Fill(Ds);
           Cmd.DataSource = Ds.Tables[0];
           Cmd.DisplayMember = displayCol;
           Cmd.ValueMember = valueCol;
           Cmd.SelectedIndex = -1;
       }
   }
}




وهذا السطر يوضع  في حدث الفورم لود


PHP كود :
DB.FillComBobx(comboBox1"select Name,ID from TB_School""Name""ID"); 

وهذا الكود يعمل بطريقه ممتاذه على اى كمبو بوكس خارج الدتا فيو
لو اردت اطبق هذ الكود على كمبو بوكس داخل الداتا فيو بيطلع خطأ 
هل هناك حل شبيه لهذا لتعبئه كمبو بوكس داخل الداتا فيو بنفس الطريقه باستخدام كلاس نظرا لان المشروع به عدد كبير جدا من الدتا فيو واغلبها كمبو بوكس

ولتخفيف الاكواد بدل تكرارها
 وجزكم الله كل خير
مرفق ملف يوضح اكثر
(10-07-19, 04:46 PM)asemshahen5 كتب : [ -> ]https://www.youtube.com/watch?v=A7C9m7LkX_M

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

PHP كود :
       // ------------------[تعبئة كمبو بوكس اللي في الغريد فيو]-------------------
 
       public static void FillDGVComBobx(DataGridView dgvstring Sqlstring displayCol)
 
       {
 
           SqlDataAdapter sda1 = new SqlDataAdapter(SqlCon);
 
           DataTable dt1 = new DataTable();
 
           sda1.Fill(dt1);
 
           ArrayList StringList = new ArrayList();

 
           foreach (DataRow item in dt1.Rows)
 
           {
 
               StringList.Add(item[displayCol].ToString());
 
           }
 
           foreach (DataRow item in dt1.Rows)
 
           {
 
               int n dgv.Rows.Add();
 
               var CellSample = new DataGridViewComboBoxCell();
 
               CellSample.DataSource StringList;
 
               dgv.Rows[n].Cells[0] = CellSample;//Name,EmployeeID
 
               dgv.Rows[n].Cells[1].Value item["EmployeeID"].ToString();
 
               dgv.Rows[n].Cells[2].Value item["Name"].ToString();

 
               dgv.Rows[n].Cells[0].Value StringList[n].ToString();
 
           }

 
       
PHP كود :
DB.FillDGVComBobx(dataGridView1"select Office,Name,EmployeeID from Employee""Office"); 
(10-07-19, 06:01 PM)asemshahen5 كتب : [ -> ]خود دا الكود و افهمه و عدله حسب ما تراه :

PHP كود :
       // ------------------[تعبئة كمبو بوكس اللي في الغريد فيو]-------------------
 
       public static void FillDGVComBobx(DataGridView dgvstring Sqlstring displayCol)
 
       {
 
           SqlDataAdapter sda1 = new SqlDataAdapter(SqlCon);
 
           DataTable dt1 = new DataTable();
 
           sda1.Fill(dt1);
 
           ArrayList StringList = new ArrayList();

 
           foreach (DataRow item in dt1.Rows)
 
           {
 
               StringList.Add(item[displayCol].ToString());
 
           }
 
           foreach (DataRow item in dt1.Rows)
 
           {
 
               int n dgv.Rows.Add();
 
               var CellSample = new DataGridViewComboBoxCell();
 
               CellSample.DataSource StringList;
 
               dgv.Rows[n].Cells[0] = CellSample;//Name,EmployeeID
 
               dgv.Rows[n].Cells[1].Value item["EmployeeID"].ToString();
 
               dgv.Rows[n].Cells[2].Value item["Name"].ToString();

 
               dgv.Rows[n].Cells[0].Value StringList[n].ToString();
 
           }

 
       

بص ياباشا
معلش لو تتعبك معايا
الكود دا موجود داخل كلاس عام يعمل على كل المشروع
كود :
      // ------------------[تعبئة كمبو بوكس]-------------------
      public static void FillComBobx(ComboBox Cmd, string Sql, string displayCol, string valueCol)
      {
          SqlDataAdapter Da = new SqlDataAdapter(Sql, Con);
          DataSet Ds = new DataSet();
          Da.Fill(Ds);
          Cmd.DataSource = Ds.Tables[0];
          Cmd.DisplayMember = displayCol;
          Cmd.ValueMember = valueCol;
          Cmd.SelectedIndex = -1;
      }
ودا سطر واحد بيتم وضع اسم الكمبو بوكس وعمود ID واسم العمود المراد تعبئه الكمبو بوكس به واسم الجدول يوضع في حدث الفورم لود
كود :
DB.FillComBobx(comboBox1, "select Name,ID from TB_School", "Name", "ID");

يريت تعمل مثال على الملف المرفق وتبعتهولى
لانى مش قادر افهم الكود
هذا الكود بعد التعديل :

PHP كود :
/// <summary>
 
       /// تعبئة الغريد فيو و الكمبو بوكس اللي في الغريد فيو
 
       /// </summary>
 
       /// <param name="dgv">اسم الداتاغريد فيو على الفورم</param>
 
       /// <param name="Sql">الاستعلام المستخدم</param>
 
       /// <param name="displayCol">اسم العامود الموجود بالجدول بقاعدة البيانات</param>
 
       /// <param name="ColInt">ترتيب العامود بالداتا غريد فيو</param>
 
       public static void FillDGVComBobx(DataGridView dgvstring Sqlstring displayCol,int ColInt)
 
       {
 
           SqlDataAdapter sda1 = new SqlDataAdapter(SqlCon);
 
           DataTable dt1 = new DataTable();
 
           sda1.Fill(dt1);
 
           ArrayList StringList = new ArrayList();
 
           foreach (DataRow item in dt1.Rows)
 
           {
 
               StringList.Add(item[displayCol].ToString());
 
           }
 
           int n 0;
 
           int y dt1.Columns.Count 1;
 
           foreach (DataRow item in dt1.Rows)
 
           {
 
               n=dgv.Rows.Add();
 
               foreach (DataColumn itemCol in dt1.Columns)
 
               {
 
                   DataGridViewComboBoxCell CellSample = new DataGridViewComboBoxCell();
 
                   CellSample.DataSource StringList;
 
                   if (itemCol.Ordinal == ColInt)
 
                   {
 
                       dgv.Rows[n].Cells[itemCol.Ordinal] = CellSample;//Name,EmployeeID
 
                   }
 
                   else
                    
{
 
                       dgv.Rows[n].Cells[itemCol.Ordinal].Value item[itemCol.ColumnName].ToString();
 
                   }
 
               }
 
               dgv.Rows[n].Cells[0].Value StringList[n].ToString();
 
           }
 
       


و هذا كود استدعائه :

PHP كود :
private void Form1_Load(object senderEventArgs e)
 
       {
 
           DB.FillDGVComBobx(dataGridView1"select Office,Name,EmployeeID from Employee""Office",0);
 
       
اتفضل , انا غيرت بس ال DataTable علشان اجربه عندي.
هتعمل تمرير لاي Combo ف ال Grid 
ب الشكل ده 
PHP كود :
(DataGridViewComboBoxCell)dataGridView1.Rows[0].Cells[0



PHP كود :
  DB.FillComBobx((DataGridViewComboBoxCell)dataGridView1.Rows[0].Cells[0], "select ID,Char_Name from TabTest""ID""Char_Name"); 

PHP كود :
       // ------------------[تعبئة كمبو بوكس]-------------------
 
       public static void FillComBobx(DataGridViewComboBoxCell Cmdstring Sqlstring displayColstring valueCol)
 
       {
 
           SqlDataAdapter Da = new SqlDataAdapter(SqlCon);
 
           DataSet Ds = new DataSet();
 
           Da.Fill(Ds);
 
          
            Cmd
.DataSource Ds.Tables[0];
 
           Cmd.DisplayMember displayCol;
 
           Cmd.ValueMember valueCol;
 
    
        

مشكور جدا على الحل كان امامي و لم انتبه له لذلك تابعت لعمله يعبئ الداتا غريد بشكل كامل لكن طريقتك مبسطة اكثر و مختصر .
(10-07-19, 07:32 PM)asemshahen5 كتب : [ -> ]مشكور جدا على الحل كان امامي و لم انتبه له لذلك تابعت لعمله يعبئ الداتا غريد بشكل كامل لكن طريقتك مبسطة اكثر و مختصر .

الشكر لله اخي , موفق ان شاء الله
(10-07-19, 07:23 PM)Eng.Ahmed Amen كتب : [ -> ]اتفضل , انا غيرت بس ال DataTable علشان اجربه عندي.
هتعمل تمرير لاي Combo ف ال Grid 
ب الشكل ده 
PHP كود :
(DataGridViewComboBoxCell)dataGridView1.Rows[0].Cells[0



PHP كود :
  DB.FillComBobx((DataGridViewComboBoxCell)dataGridView1.Rows[0].Cells[0], "select ID,Char_Name from TabTest""ID""Char_Name"); 

PHP كود :
       // ------------------[تعبئة كمبو بوكس]-------------------
 
       public static void FillComBobx(DataGridViewComboBoxCell Cmdstring Sqlstring displayColstring valueCol)
 
       {
 
           SqlDataAdapter Da = new SqlDataAdapter(SqlCon);
 
           DataSet Ds = new DataSet();
 
           Da.Fill(Ds);
 
          
            Cmd
.DataSource Ds.Tables[0];
 
           Cmd.DisplayMember displayCol;
 
           Cmd.ValueMember valueCol;
 
    
        


شكرا لاهتمامك استاذي الغالى
الكود دا مختصر لكن بيطلع خطأ لو ممكن ارفق مثال افضل

(10-07-19, 07:06 PM)asemshahen5 كتب : [ -> ]هذا الكود بعد التعديل :

PHP كود :
/// <summary>
 
       /// تعبئة الغريد فيو و الكمبو بوكس اللي في الغريد فيو
 
       /// </summary>
 
       /// <param name="dgv">اسم الداتاغريد فيو على الفورم</param>
 
       /// <param name="Sql">الاستعلام المستخدم</param>
 
       /// <param name="displayCol">اسم العامود الموجود بالجدول بقاعدة البيانات</param>
 
       /// <param name="ColInt">ترتيب العامود بالداتا غريد فيو</param>
 
       public static void FillDGVComBobx(DataGridView dgvstring Sqlstring displayCol,int ColInt)
 
       {
 
           SqlDataAdapter sda1 = new SqlDataAdapter(SqlCon);
 
           DataTable dt1 = new DataTable();
 
           sda1.Fill(dt1);
 
           ArrayList StringList = new ArrayList();
 
           foreach (DataRow item in dt1.Rows)
 
           {
 
               StringList.Add(item[displayCol].ToString());
 
           }
 
           int n 0;
 
           int y dt1.Columns.Count 1;
 
           foreach (DataRow item in dt1.Rows)
 
           {
 
               n=dgv.Rows.Add();
 
               foreach (DataColumn itemCol in dt1.Columns)
 
               {
 
                   DataGridViewComboBoxCell CellSample = new DataGridViewComboBoxCell();
 
                   CellSample.DataSource StringList;
 
                   if (itemCol.Ordinal == ColInt)
 
                   {
 
                       dgv.Rows[n].Cells[itemCol.Ordinal] = CellSample;//Name,EmployeeID
 
                   }
 
                   else
                    
{
 
                       dgv.Rows[n].Cells[itemCol.Ordinal].Value item[itemCol.ColumnName].ToString();
 
                   }
 
               }
 
               dgv.Rows[n].Cells[0].Value StringList[n].ToString();
 
           }
 
       


و هذا كود استدعائه :

PHP كود :
private void Form1_Load(object senderEventArgs e)
 
       {
 
           DB.FillDGVComBobx(dataGridView1"select Office,Name,EmployeeID from Employee""Office",0);
 
       

بالرغم ان الكود طويل لكن النتيجه 100%
شكرا ليك استاذي الغالى
الصفحات : 1 2 3 4