PDA

View Full Version : ترکیب اطلاعات دو Combobox



mary3541
سه شنبه 14 مهر 1388, 09:13 صبح
با سلام
توی فرمم دوتا combobox دارم که توی یکیش ترم و داخل دیگری نام اساتید هست.میخوام با انتخاب اطلاعات این دو combobox داخل datagridview که در این فرمم وجود داره اطلاعات ترکیبی این دو combobox و اسامی دانشجویان این استاد بیاد برای مثال اگه ترم 1/87 رو از combobox ترم انتخاب کردم و نام شریفی رو از combobox استاد. توی dgv ترم 1/87 و استاد شریفی با دانشجویانی که داره فقط بیاد.
یه table هم توی پایگاه دادم دارم که داخل آن نام اساتیدTeacherName و ترمها Term و نام دانشجویان Student اومده.
باید چیکار کنم؟

alihassanabadi
سه شنبه 14 مهر 1388, 09:50 صبح
سلام دوست عزیز
میتونی ازselect های تو در تو استفاده کنی
در ضمن اگه واسه پایگاهتون diagram بکشید و فیلدها رو به هم ربط بدی این کار رو میشه به راحتی انجام داد
________________________________________
دست هایی که کمک میکنند مقدس تر از لب هایی هستند که دعا میکنند.کوروش کبیر

mary3541
سه شنبه 14 مهر 1388, 09:57 صبح
سلام دوست عزیز
میتونی ازselect های تو در تو استفاده کنی
در ضمن اگه واسه پایگاهتون diagram بکشید و فیلدها رو به هم ربط بدی این کار رو میشه به راهتی انجام داد


میشه بیشتر توضیح بدید؟ بخصوص راه حل اول رو

اَرژنگ
سه شنبه 14 مهر 1388, 10:12 صبح
میشه بیشتر توضیح بدید؟ بخصوص راه حل اول رو



Select Where TeacherName = @TeacherName and Term =@Term


بیخودی احتیاج نیست که Select تو در تو استفاده بشه.
این حالا حتما باید کمبو باکس باشند؟

alihassanabadi
سه شنبه 14 مهر 1388, 10:18 صبح
دوست من شرمنده من الان با سیستم خودم کانکت نیستم
ولی میتونم بگم که
جدولاتو Join کن
شما باید این دستورات رو یاد بگیری برای رسیدن به این هدف در قسمت sql جستجو کن
و دستورت select و جوین رو یاد بگیر
یا میتونی از هر جدول یه select تا زمانی که برابر combo باشه بگیری
__________________________________
سعادت دیگران بخش مهمی از خوشبختی ماست.

alihassanabadi
سه شنبه 14 مهر 1388, 10:25 صبح
Select Where TeacherName = @TeacherName and Term =@Term


بیخودی احتیاج نیست که Select تو در تو استفاده بشه.
این حالا حتما باید کمبو باکس باشند؟
ببخشید ولی ایشون گفتند که ترم و استاد در دو جدول جداگانه وجود دارند
سلکت شما مشخص نیست که از کدام جدول اطلاعات میکشه


select *from teacher where teachername='"+combo.selecteditem.tostring()+'"


__________________________________
دست هایی که کمک میکنند مقدس تر از لب هایی هستند که دعا میکنند .کوروش کبیر

اَرژنگ
سه شنبه 14 مهر 1388, 10:29 صبح
[QUOTE=alihassanabadi;822132]ببخشید ولی ایشون گفتند که ترم و استاد در دو جدول جداگانه وجود دارند
سلکت شما مشخص نیست که از کدام جدول اطلاعات میکشه


select *from teacher where teachername='"+combo.selecteditem.rostring()+'"


از جدول جوین شده.
لطفا استفاده از پارامترها را به سخط کد کردن مقادیر تکست باکسها ترجیح بدیم، برایه آموزش بهتره.

saber4166
سه شنبه 14 مهر 1388, 10:32 صبح
دوست عزیزسلام اگر از diagram استفاده میکنید , بهتره از View ها در SQL استفاده کنید کارتونو خیلی راحت میکنه
اگر بلد نیستین بگین

mary3541
سه شنبه 14 مهر 1388, 10:44 صبح
شرمنده من منظورتون رو درست متوجه نشدم(چون مبتدیم)
من کدهای خودم رو میگذارم یه نگاهی بهشون بکنید
تو لایه data


public DataTable view1(string LastNameFa)
{
SqlConnection con = new SqlConnection("data source=.\\sqlexpress;attachdbfilename=|datadirecto ry|\\academy.mdf;integrated security=true; user instance=true");
DataTable dt = new DataTable();
SqlDataAdapter sda = new SqlDataAdapter("select CourseTermTeacher.Term_ID, Course.TitleEn , Teacher.LastNameFa ,Student.LastNameFa from CourseTermTeacher join Course ON Course.ID = CourseTermTeacher.Course_ID join Term ON Term.ID = CourseTermTeacher.Term_ID join Teacher ON Teacher.ID= CourseTermTeacher.Teacher_ID join Student ON Student.ID = CourseTermTeacher.Student_ID where Teacher.LastNameFa = '" + LastNameFa + "'", con);
sda.SelectCommand.CommandType = CommandType.Text;
sda.Fill(dt);
return dt;
}
public DataTable view2(string Term_ID)
{
SqlConnection con = new SqlConnection("data source=.\\sqlexpress;attachdbfilename=|datadirecto ry|\\academy.mdf;integrated security=true; user instance=true");
DataTable dt = new DataTable();
SqlDataAdapter sda = new SqlDataAdapter("select CourseTermTeacher.Term_ID, Course.TitleEn , Teacher.LastNameFa ,Student.LastNameFa from CourseTermTeacher join Course ON Course.ID = CourseTermTeacher.Course_ID join Term ON Term.ID = CourseTermTeacher.Term_ID join Teacher ON Teacher.ID= CourseTermTeacher.Teacher_ID join Student ON Student.ID = CourseTermTeacher.Student_ID where CourseTermTeacher.Term_ID = '" + Term_ID + "'", con);
sda.SelectCommand.CommandType = CommandType.Text;
sda.Fill(dt);
return dt;
}


تو لایه business


public DataTable view1(string LastNameFa)
{
return objctt.view1(LastNameFa);
}
public DataTable view2(string Term_ID)
{
return objctt.view2(Term_ID);
}


تو لایه نمایش


private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt =objctt.view1(comboBox1.Text);
dgv.DataSource = dt;
}
private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt = objctt.view2(comboBox2.Text);
dgv.DataSource = dt;
}


حالا میشه بگید تغییراتی که باید بدم کجاست؟
اصلا این طرز نوشتن درسته؟

alihassanabadi
سه شنبه 14 مهر 1388, 10:49 صبح
[quote=alihassanabadi;822132]ببخشید ولی ایشون گفتند که ترم و استاد در دو جدول جداگانه وجود دارند
سلکت شما مشخص نیست که از کدام جدول اطلاعات میکشه


select *from teacher where teachername='"+combo.selecteditem.rostring()+'"
از جدول جوین شده.
لطفا استفاده از پارامترها را به سخط کد کردن مقادیر تکست باکسها ترجیح بدیم، برایه آموزش بهتره.
بله دوستمون جناب آرژنگ درست میگن
منهم با ایشون موافقم چون هم امنیت رو بالا میبره هم آموزش بهتری داره
ولی من به خاطر اینکه سریعتر جواب بدم از پارامترها استفاده نکردم ببخشید
__________________________________________________
دست هایی که کمک میکنند مقدس تر از لب هایی هستند که دعا میکنند.کوروش کبیر

اَرژنگ
سه شنبه 14 مهر 1388, 11:17 صبح
برایه یک تازه کار خیلی خوب است! از اینکه حداقل سعی کردید که به ۳ قسمت تقسیم کنید نشان خوبی است. (میشه بهینه‌ترش کرد ولی اون یک داستان سواست).
در لایه data میتونید از یک متد استفاده کنید:



public DataTable GetStudents(string LastNameFa, int Term_ID)
{
SqlConnection con = new SqlConnection("data source=.\\sqlexpress;attachdbfilename=|datadirecto ry|\\academy.mdf;integrated security=true; user instance=true");
DataTable dt = new DataTable();
SqlDataAdapter sda = new SqlDataAdapter(
@"select CourseTermTeacher.Term_ID, Course.TitleEn ,
Teacher.LastNameFa ,Student.LastNameFa from CourseTermTeacher
join
Course ON Course.ID = CourseTermTeacher.Course_ID join Term
ON Term.ID = CourseTermTeacher.Term_ID
join Teacher ON Teacher.ID= CourseTermTeacher.Teacher_ID
join Student ON Student.ID = CourseTermTeacher.Student_ID
where Teacher.LastNameFa = @LastNameFa and CourseTermTeacher.Term_ID = @Term_ID", con);

sda.SelectCommand.Parameters.Add("@LastNameFa", SqlDbType.VarChar, 80).Value = LastNameFa;
sda.SelectCommand.Parameters.Add("@Term_ID", SqlDbType.Int).Value = Term_ID;

sda.SelectCommand.CommandType = CommandType.Text;
sda.Fill(dt);
return dt;
}

از اینجا به ببعد یکمی باهاش ور برو، اگر مشکل داشتی پروژه را پست کن درستش کنیم.

اَرژنگ
سه شنبه 14 مهر 1388, 11:21 صبح
[quote=اَرژنگ;822138]
بله دوستمون جناب آرژنگ درست میگن
منهم با ایشون موافقم چون هم امنیت رو بالا میبره هم آموزش بهتری داره
ولی من به خاطر اینکه سریعتر جواب بدم از پارامترها استفاده نکردم ببخشید
__________________________________________________
دست هایی که کمک میکنند مقدس تر از لب هایی هستند که دعا میکنند.کوروش کبیر

من هم از اینکه یک select نصفه فرستادم معذرت میخوام، کد این بابا از select نیمه تمام من هیچ سودی نمیبرد!
زنده باد کوروش کبیر!
مخلصیم

اَرژنگ
سه شنبه 14 مهر 1388, 11:33 صبح
با عرض شرمندگی!
کدی که در پست قبلیم فرستادم قابلیت نشاند دهندگی اشتباه در آموزش دهندگی است! لطفا یکی دلیلش را بگه که بقیه هم عبرت بگیرند.

کد تصحیح شده در زیر میباشد:


public DataTable GetStudents(int Teacher_ID, int Term_ID)
{
SqlConnection con = new SqlConnection("data source=.\\sqlexpress;attachdbfilename=|datadirecto ry|\\academy.mdf;integrated security=true; user instance=true");
DataTable dt = new DataTable();
SqlDataAdapter sda = new SqlDataAdapter(
@"select CourseTermTeacher.Term_ID, Course.TitleEn ,
Teacher.LastNameFa ,Student.LastNameFa from CourseTermTeacher
join
Course ON Course.ID = CourseTermTeacher.Course_ID join Term
ON Term.ID = CourseTermTeacher.Term_ID
join Teacher ON Teacher.ID= CourseTermTeacher.Teacher_ID
join Student ON Student.ID = CourseTermTeacher.Student_ID
where Teacher.ID = @Teacher_ID and CourseTermTeacher.Term_ID = @Term_ID", con);
sda.SelectCommand.Parameters.Add("@Teacher_ID", SqlDbType.VarChar, 80).Value = Teacher_ID;
sda.SelectCommand.Parameters.Add("@Term_ID", SqlDbType.Int).Value = Term_ID;

sda.SelectCommand.CommandType = CommandType.Text;
sda.Fill(dt);
return dt;
}

alihassanabadi
شنبه 18 مهر 1388, 18:07 عصر
[quote=alihassanabadi;822171]

من هم از اینکه یک select نصفه فرستادم معذرت میخوام، کد این بابا از select نیمه تمام من هیچ سودی نمیبرد!
زنده باد کوروش کبیر!
مخلصیم
سلام
این تاپیک محتوای اموزشی در باب برنامه نویسی نداره ولی جا داره که این تاپیک رو بزنم
بله این یکی از خصوصیات کوروش کبیر که جناب ارژنگ داره ازش سود میبره
تو اواتارش هم این امر به وضوح دیده میشه
با تشکر از شما دوستان و کوروش کبیر که با حرف هاش به ما زندگی میبخشه