PDA

View Full Version : مشکل در نمایش دو جدول در یک دیتاگریدویو



Iman7228
پنج شنبه 15 تیر 1391, 18:51 عصر
سلام دوستان.
من یه برنامه دارم می نویسم که باهاش به مشکل برخوردم..
تو برنامه یه قسمت برای ثبت مشتری داریم و یه قسمت هم برای ثبت سفارشات مربوط به مشتری...
هر مشتری برای خودش یه کد ثابت داره و هر سفارش هم برای خودش کد مشخص و ثابتی داره...
هر جدول هم شاید دارای 10 فیلد باشه ولی من میخوام بعضی از فیلدهای این دو جدول رو تو دیتاگرید نشون بدم که با خطا روبرو میشم.
برای اینکار از تابع load_datebase() استفاده کردم که کدشو نوشتم.



DataSet ds1 = new DataSet();
DataSet ds2 = new DataSet();
SqlCommand scm1 = new SqlCommand();
SqlCommand scm2 = new SqlCommand();
SqlConnection con1 = Form1.objconnection;

private void load_database()
{

try
{

dataGridView1.Rows.Clear();
ds1.Clear();
ds2.Clear();

SqlDataAdapter dal = new SqlDataAdapter(scm1);
dal.Fill(ds1, "TEMP");

for (int i = 0; i < ds1.Tables["TEMP"].Rows.Count; i++)
{
dataGridView1.Rows.Add();
dataGridView1.Rows[i].Cells["name"].Value = ds1.Tables["TEMP"].Rows[i]["name"].ToString();
dataGridView1.Rows[i].Cells["family"].Value = ds1.Tables["TEMP"].Rows[i]["family"].ToString();
dataGridView1.Rows[i].Cells["code"].Value = ds1.Tables["TEMP"].Rows[i]["code"].ToString();
}


dal.SelectCommand = scm2;
dal.Fill(ds2, "TEMP");


for (int i = 0; i < ds2.Tables["TEMP"].Rows.Count; i++)
{

dataGridView1.Rows[i].Cells["deliverydate"].Value = ds2.Tables["TEMP"].Rows[i][0].ToString();
dataGridView1.Rows[i].Cells["orderstatus"].Value = ds2.Tables["TEMP"].Rows[i][1].ToString();

}

for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
dataGridView1.Rows[i].Cells[0].Value = i + 1;

}

}

catch (SqlException)
{
MessageBox.Show("error");
}

}




اینم کد لود فرم :



private void Form11_Load(object sender, EventArgs e)
{

scm1.Connection = con1;
scm1.CommandText = "select * from moshtari order by code";
scm2.CommandText = "select * from sefareshtbl";

scm2.Connection = con1;
load_database();
}



عکسشم ضمیمه کردم که متوجه منظورم بشید.(البته این تصویر به صورت دستی و نمونه درست شده)
قسمت های مشکی : فیلدهای ارتباط بین دو جدول (relationship)
قسمت های آبی : جدول شماره1
قسمت های قرمز : جدول شماره2


ممنون میشم جواب بدین...

veniz2008
پنج شنبه 15 تیر 1391, 19:32 عصر
سلام. شما باید از دستور inner join استفاده کنید( قبلش باید بین این دو جدول ارتباط برقرار کنید یعنی کلید خارجی داشته باشی که همون فیلد کد مشتری میشه)،کد نویسیش 5 خط هم نمیشه،این همه کد میخوای چکار؟؟؟

Iman7228
پنج شنبه 15 تیر 1391, 20:04 عصر
میشه لینک اموزش بدید یا اینکه کدشو لطف کنید؟؟؟

نام جدhول : customer , order

اینم اسم فیلدامه :
جدول customer
name-family-code

جدول Order
-deliverydate-billid-codecustomer-orderstatus

و فیلدایی که باید نمایش داده بشه :

name-family-code-deliverydate-orderstatus
فوری باید درستش کنم...

sama552
پنج شنبه 15 تیر 1391, 20:23 عصر
سلام
شما برای Innerjoinی دوتا جدول باید یک فیلد مشترک در دو تا جدول داشته باشی که مشخص می کنه کدام سفارش مربوط به کدام مشتریه
این لینک را مطالعه کنhttp://www.w3schools.com/sql/sql_join_inner.asp

veniz2008
پنج شنبه 15 تیر 1391, 20:27 عصر
نام دیتابیس؟
نام فیلد مشترک بین دو جدول؟(کلید اصلی و کلید خارجی جدولت؟)
نوع فیلدها؟

Iman7228
پنج شنبه 15 تیر 1391, 20:44 عصر
نام دیتابیس : DB1
نام جدول ها : Customer , Order
نام فیلد مشترک بین دو جدول : codecustomer
نوع فیلدها :
جدول customer
code : int
name : nvarchar30
family : nvarchar30

جدول order :

billid : int
codecustomer : int
oredrdate : nvarchar30
deliverydate : nvarchar30
orderstatus : bit

veniz2008
پنج شنبه 15 تیر 1391, 20:54 عصر
من این کد رو براتون میذارم (من فرض کردم که فیلد code از جدول customer همان فیلد codecustomer از جدول customer هست):

SqlConnection con = new SqlConnection("Data Source = (local);Initial Catalog = DB1;Integrated Security = True");
SqlDataAdapter da = new SqlDataAdapter("select customer.name,customer.family,customer.id,Order.de liverydate,Order.orderstatus from customer inner join Order on customer.code = Order.codecustomer ", con);
con.Open();
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;
con.Close();
موفق باشید.

sama552
پنج شنبه 15 تیر 1391, 20:59 عصر
در seect ات باید بنویسی

select name, family,oredrdat,deliverydate
from customer inner join order on customer.code=order.codecustomer

Iman7228
پنج شنبه 15 تیر 1391, 20:59 عصر
دستت درست.. حیفم اومد اسپم نزم و تشکر زبونی انجام ندم....