السلام عليكم ورحمة الله تعالى وبركاته
اساتذتى الكرام
ارجو مساعدتى فى تنفيذ هذ الطلب
يوجد 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");
وهذا الكود يعمل بطريقه ممتاذه على اى كمبو بوكس خارج الدتا فيو
لو اردت اطبق هذ الكود على كمبو بوكس داخل الداتا فيو بيطلع خطأ
هل هناك حل شبيه لهذا لتعبئه كمبو بوكس داخل الداتا فيو بنفس الطريقه باستخدام كلاس نظرا لان المشروع به عدد كبير جدا من الدتا فيو واغلبها كمبو بوكس
ولتخفيف الاكواد بدل تكرارها
وجزكم الله كل خير
مرفق ملف يوضح اكثر
خود دا الكود و افهمه و عدله حسب ما تراه :
PHP كود :
// ------------------[تعبئة كمبو بوكس اللي في الغريد فيو]-------------------
public static void FillDGVComBobx(DataGridView dgv, string Sql, string displayCol)
{
SqlDataAdapter sda1 = new SqlDataAdapter(Sql, Con);
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 dgv, string Sql, string displayCol)
{
SqlDataAdapter sda1 = new SqlDataAdapter(Sql, Con);
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");
يريت تعمل مثال على الملف المرفق وتبعتهولى
لانى مش قادر افهم الكود
اتفضل , انا غيرت بس ال 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 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;
}
مشكور جدا على الحل كان امامي و لم انتبه له لذلك تابعت لعمله يعبئ الداتا غريد بشكل كامل لكن طريقتك مبسطة اكثر و مختصر .
(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 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;
}
شكرا لاهتمامك استاذي الغالى
الكود دا مختصر لكن بيطلع خطأ لو ممكن ارفق مثال افضل
(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 dgv, string Sql, string displayCol,int ColInt)
{
SqlDataAdapter sda1 = new SqlDataAdapter(Sql, Con);
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 sender, EventArgs e)
{
DB.FillDGVComBobx(dataGridView1, "select Office,Name,EmployeeID from Employee", "Office",0);
}
بالرغم ان الكود طويل لكن النتيجه 100%
شكرا ليك استاذي الغالى