PDA

View Full Version : ارتباط بین دو comboBox



messi13
شنبه 22 تیر 1392, 20:03 عصر
سلام من میخوام اتصال دوتا comboBox رو طوری قرار بدم که با انتخاب comboBox1 که اطلاعاتشو از قبل در جدول ذخیره کردم نام رشته،مثلا comboBox1 بزنم کامپیوتر فقط گرایشهای مرتبط با کامپیوتر رو در comboBox2 نمایش بده
باتشکر
اینم عکس از جدول و فروم

http://www.papilmob.ir/wp-content/uploads/2013/07/sshot-106.jpg

http://axgig.com/images/73358823343117148711.jpg

khokhan
شنبه 22 تیر 1392, 20:08 عصر
سلام من میخوام اتصال دوتا comboBox رو طوری قرار بدم که با انتخاب comboBox1 که اطلاعاتشو از قبل در جدول ذخیره کردم نام رشته،مثلا comboBox1 بزنم کامپیوتر فقط گرایشهای مرتبط با کامپیوتر رو در comboBox2 نمایش بده
باتشکر
اینم عکس از جدول و فروم




با ado یا linq کدومشو می خوای ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

این برای ado:
کمبوی استانهای ایران:لبخند:
اگه برای linq هم خواستی بگو

messi13
شنبه 22 تیر 1392, 23:45 عصر
فدات داداش من اینو قبلا دان کردم
من اصلا اینجوری کدنویسی نمی کنم(الان نفهمیدم چی به چی شد)
شرمنده چون تازه کارم :D
من با dataset , adaptor و...اینجوری کار کردم یعنی میارمشون رو فرم..
حالا اینا میشن linq ..اگه بله..لطفا زحمتش رو بکشید.
امکانش هست کدای اون چیزی که پست اول دادم واسم بذارید.
شرمنده اگه مبتدی صحبت نمودیم :D
ممنون

khokhan
یک شنبه 23 تیر 1392, 01:17 صبح
فدات داداش من اینو قبلا دان کردم
من اصلا اینجوری کدنویسی نمی کنم(الان نفهمیدم چی به چی شد)
شرمنده چون تازه کارم :D
من با dataset , adaptor و...اینجوری کار کردم یعنی میارمشون رو فرم..
حالا اینا میشن linq ..اگه بله..لطفا زحمتش رو بکشید.
امکانش هست کدای اون چیزی که پست اول دادم واسم بذارید.
شرمنده اگه مبتدی صحبت نمودیم :D
ممنون

با سلام مجدد وکلی حرف وحدیث دیگه:لبخند:
درlinq بعد از اینکه پروژه رو با دیتابیس ارتباط دادی و مخلفاتش رو افزودی ، در رویداد لود فرم کمبوی اول با یه کوئری به فیلد اصلی ربط می دی اینطوری :


private void Form1_Load(object sender, EventArgs e)
{
DataClasses1DataContext db = new DataClasses1DataContext();
var query = (from zirna in db.zirnas
select new { zirna.code, zirna.State })
.Distinct();
this.comboBox1.DataSource = query.ToArray();
this.comboBox1.DisplayMember = "State";
this.comboBox1.ValueMember = "code";
}

بعد می آیی در رویداد SelectedIndexChanged کمبوی اول ، باز یه کوئری دیگه تعریف می کنی ومقدار فیلد بعدی رو با توجه به گزینه انتخابی در کمبوی اول به کمبوی دوم ارتباط می دی اینطوری :


private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
DataClasses1DataContext dc = new DataClasses1DataContext();
var result = (from n in dc.GetTable<zirna>()
where n.State.Contains(comboBox1.Text)
select n).ToList();
this.comboBox2.DataSource = result.ToArray();
this.comboBox2.DisplayMember = "city";

}

فقط یادت باشه کوئری کمبوی اول رو با Distinct تعریف کنی تا گزینه هات تکراری نباشند :لبخند:

این هم همون پروژه قبلی با linq

messi13
یک شنبه 23 تیر 1392, 14:21 عصر
ممنون برادر..تشکر..:قلب:
یه سئوال دیگه
من یه کمبوی سوم هم ایجاد کردم و رکورد هم نشون میده(روستا)
من بعنوان مثال rosta هم به جدول اضافه کردم
حالا رکورد تکراری تو کمبوی 2 وجود داره این Distinct رو تست کردم برنامه خطائی نداد ولی با اجرای برنامه بازم رکورد تکراری وجود داشت
ممنون میشم راهنمائی کنید.

khokhan
دوشنبه 24 تیر 1392, 08:14 صبح
ممنون برادر..تشکر..:قلب:
یه سئوال دیگه
من یه کمبوی سوم هم ایجاد کردم و رکورد هم نشون میده(روستا)
من بعنوان مثال rosta هم به جدول اضافه کردم
حالا رکورد تکراری تو کمبوی 2 وجود داره این Distinct رو تست کردم برنامه خطائی نداد ولی با اجرای برنامه بازم رکورد تکراری وجود داشت
ممنون میشم راهنمائی کنید.
کوئری مربوط به SelectedIndexChanged کمبوی دوم رو چطوری نوشتی ؟

messi13
دوشنبه 24 تیر 1392, 11:12 صبح
private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
DataClasses1DataContext da = new DataClasses1DataContext();

var result = (from n in da.GetTable<zirna>().Distinct()
where n.city.Contains(comboBox2.Text)
select n).ToList();
this.comboBox3.DataSource = result.ToArray();
this.comboBox3.DisplayMember = "rosta";

}

khokhan
دوشنبه 24 تیر 1392, 21:25 عصر
ممنون برادر..تشکر..:قلب:
یه سئوال دیگه
من یه کمبوی سوم هم ایجاد کردم و رکورد هم نشون میده(روستا)
من بعنوان مثال rosta هم به جدول اضافه کردم
حالا رکورد تکراری تو کمبوی 2 وجود داره این Distinct رو تست کردم برنامه خطائی نداد ولی با اجرای برنامه بازم رکورد تکراری وجود داشت
ممنون میشم راهنمائی کنید.

بهتره کوئری ها رو به این ترتیب عوض کنین
برای پر کردن کمبوی اول این کوئری رو قرار بدین :

private void Form1_Load(object sender, EventArgs e)
{
DataClasses1DataContext db = new DataClasses1DataContext();
var query = (from zirna in db.zirnas
select new {zirna.State })
.Distinct();
this.comboBox1.DataSource = query.ToArray();
this.comboBox1.DisplayMember = "State";
//this.comboBox1.ValueMember = "id";
}

این هم برای رویداد SelectedIndexChanged کمبوی اول

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
DataClasses1DataContext dc = new DataClasses1DataContext();
var result = (from zirna in dc.zirnas
where zirna.State.Contains(comboBox1.Text)
select new { zirna.city })
.Distinct();

this.comboBox2.DataSource = result.ToArray();
this.comboBox2.DisplayMember = "city";

}
واین هم برای رویداد SelectedIndexChanged کمبوی دوم

private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
DataClasses1DataContext dc = new DataClasses1DataContext();
var result = (from zirna in dc.zirnas
where (zirna.State.Contains(comboBox1.Text)&&(zirna.city.Contains(comboBox2.Text)))
select new { zirna.Village })
.Distinct();

this.comboBox3.DataSource = result.ToArray();
this.comboBox3.DisplayMember = "rosta";
}