PDA

View Full Version : کوئری برای combobox



vapa_71
سه شنبه 19 دی 1391, 12:56 عصر
با سلام دوباره خدمت دوستان عزیزم
فک کنم توضیحاتم زیاد جالب نبود الان چند تا عکس گرفتم که فکر کنم دیگه مشکل حل بشه

همینطور که در عکس زیر میبینید من دو تا جدول دارم که ابتدا جدول سمت راست و بعد جدول سمت چپ توسط کاربر پر میشه
http://s2.picofile.com/file/7613329565/ax1.jpg

حالا در عکس زیر کاربر از کمبوباکس1 که داده های جدول سمت راست داخلش ریخته شده یک حیوان رو انتخاب میکنه حالا من میخوام وقتی مثلا سگ رو انتخاب کرد داخل کمبوباکس نژاد ، فقط نژاد های همون حیوان نمایش داده بشه که داخل جدول سمت چپ میبینید (داخل کمبوباکس اسم حیوان نمایش داده میشه اما value که میگیره عدد مربوط به هر حیوان است)
http://s3.picofile.com/file/7613330107/ax2.jpg

اینم کئوری دو تا کمبوباکس که به ترتیب میذارم
http://s2.picofile.com/file/7613331284/ax3.jpg
http://s2.picofile.com/file/7613331498/ax4.jpg

morteza271
سه شنبه 19 دی 1391, 13:21 عصر
سلام.
شما در رویداد SelectedIndexCanged کامبوباکس اولتون کد زیر رو قرار بدین :

combo2.Items.Clear();
if(combo1.Text == "a")
{
combo2.Items.Add("aa");
combo2.Items.Add("aaa");
combo2.Items.Add("aaaa");
}
else if(combo1.Text == "b")
{
combo2.Items.Add("bb");
combo2.Items.Add("bbb");
combo2.Items.Add("bbbb");
}
....

vistacali
سه شنبه 19 دی 1391, 18:25 عصر
من سوال رو درست متوجه نشدم اما چیزی که فهمیدم باید با دو تا select تو در تو بشه نوشتش یه کمی واضع تر توضیح بده

vistacali
سه شنبه 19 دی 1391, 18:41 عصر
ما اگر همون استان و شهرستان رو در نظر بگیریم راحت تره فکر کنم این کارت رو راه بندازه

به select بزن به جدول شهره ای استانها به شرطی که داخل جدول اول استانها استان مورد نظر باشه


select sh.name from city where city in (select city from city where city=pcity)
اگر اشتباه نکنم باید یه اینجور حالتی بشه بزام گیج شدم :گیج:




Select نام ستون های مورد نظر برای نمايش از جدول بيرونی
From نام جدول 1
Where نام فيلد مشترک 2 جدول IN ( Select نام فيلد مشترک 2 جدول
From نام جدول 2
Where شرط ها ... ) ;



اینو هم از اینجا (http://www.developer1.ir/SQL/Inter_Select.aspx) دیدم شاید بدردت بخوره

ordebehesht
چهارشنبه 20 دی 1391, 00:53 صبح
select nejad from table name where animalName =combobox.selecteevalue.tostring();


شاید بدردت خورد

alireza.zahani
چهارشنبه 20 دی 1391, 03:22 صبح
یک راه بسیار ساده وجود داره که با Veiw مشکلتو حل کنی
یک جدول نوع حیوان داری
یک جدول گونه حیوان
حالا یک جدول حیوان و گونه بگر با فیلد های AnimalCod و AnimalKind
بعد ارتباطشون بده
و یک View کلی بزن که توش هم نام حیوان باشه هم گونش
بعدم select کمبو رو به اون View ها تغییر بده
و وایسته کن

sasan_22
چهارشنبه 20 دی 1391, 12:10 عصر
میتونی از SP هم استفاده کنی
تقزیبا یه چیزی مثل این (کامپایل نکردم)

create proce ss
@ID
as
select breed1 from tableNEZHAD
where animalcode=@ID


خب حالا آی دی حیوان انتخاب شده (که میتونه آی دی کمبو باکس کنی) را بع عنوان ارگومان به SP بفرستی - این SP طبق کلید خارجی کار می کنه

morteza271
چهارشنبه 20 دی 1391, 14:04 عصر
نمیدونم منظورتون رو درست شدم یا نه ولی به نظرم خیلی پیچیده میکنین. این که خیلی کار ساده ایه.
شما به کد زیر دقت کنید :
public Form1()
{
InitializeComponent();
}

SqlConnection Con = new SqlConnection("Your Connection String");
private void FillCombo_AnimalType()
{
SqlDataAdapter da = new SqlDataAdapter("Select animalcode, animalkind From animaltype", Con);
DataTable dt = new DataTable();
da.Fill(dt);

comboBox1.DataSource = dt;
comboBox1.DisplayMember = "animalkind";
comboBox1.ValueMember = "animalcode";
}

private void Form1_Load(object sender, EventArgs e)
{
FillCombo_AnimalType();
}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (comboBox1.SelectedIndex > 0 && comboBox1.SelectedValue != null)
{
SqlDataAdapter da = new SqlDataAdapter("Select animalcode, breed From breed Where animalcode=" + comboBox1.SelectedValue.ToString(), Con);
DataTable dt = new DataTable();
da.Fill(dt);

comboBox2.DataSource = dt;
comboBox2.DisplayMember = "breed";
comboBox2.ValueMember = "animalcode";
}
}

تابع FillCombo_AnimalType نوع حیوانات رو توی کامبوباکس 1 نمایش میده. که این تابع هنگام لود شدن فرم فراخوانی میشه.
بعد در رویداد comboBox1_SelectedIndexChanged میایم بر اساس نوعی که انتخاب شده آیتم های مربوطه رو از جدول breed میخونیم و در کامبوباکس 2 نمایش میدیم.

به همین سادگی...
موفق باشید

vapa_71
چهارشنبه 20 دی 1391, 15:20 عصر
مرسی داداش کد عالیه اما یک مشکل داره نژاد مربوط به گزینه اول combobox1 رو نشون نمیده

mousa1992
چهارشنبه 20 دی 1391, 23:00 عصر
مرسی داداش کد عالیه اما یک مشکل داره نژاد مربوط به گزینه اول combobox1 رو نشون نمیده
کدی که دوستمون morteza271 (http://barnamenevis.org/member.php?95103-morteza271) نوشتن مشکلی نداره
باید رکوردهایی که تو جدولتون وجود داره مشکل داشته باشن یبار دیگه برسیشون کن

موفق باشی

vapa_71
پنج شنبه 21 دی 1391, 16:40 عصر
دوستان این کدی که دوست عزیزم morteza271 زحمت کشیده و قرار داده(پست8) خیلی عالیه فقط یک مشکل کوچیک داره اگه کسی میتونه بگه مشکلش کجاست ؟

http://s2.picofile.com/file/7613329565/ax1.jpg

اگه داده ها به شکل بالا باشن و ما داخل کمبوباکس اول سگ رو انتخاب کنیم داخل کمتوباکس دوم نژاد مربوط به سگ وارد نمیشن ولی بقیه حیوانات درست عمل میکنن . در واقع داده های مربوط به رکورد اول رو لود نمیکنه

khokhan
پنج شنبه 21 دی 1391, 17:53 عصر
private void Form1_Load(object sender, EventArgs e)
{
comboBoxAdminVisit.DataSource = be.Events;
comboBoxAdminVisit.DisplayMember = "EventName";
}

private void comboBoxAdminVisit_SelectedIndexChanged(object sender, EventArgs e)
{
if (comboBoxAdminVisit.SelectedItem != null)
{
Event selectedEvent = (Event)comboBoxAdminVisit.SelectedItem;

var visitors = (from cc in be.Visitors
where cc.Attending.Events.Contains(x => x.EnventId = selectedEvent.Id)
select cc);

comboBoxAdminName.DataSource = visitors;
comboBoxAdminName.DisplayMember = "Name";
}
}

morteza271
جمعه 22 دی 1391, 10:14 صبح
مرسی داداش کد عالیه اما یک مشکل داره نژاد مربوط به گزینه اول combobox1 رو نشون نمیده
سلام. آره شما درست میگین داده های آیتم اولی رو نشون نمیده اونم به این خاطره که من در رویداد comboBox1_SelectedIndexChanged در خط اول شرط رو اشتباهی نوشتم!!!
باید به این صورت باشه :
if (comboBox1.SelectedIndex >= 0 && comboBox1.SelectedValue != null)
اینو به این صورت بنویسین مشکلش درست میشه!
مشکل این بود که نوشته بودم SelectedIndex بزرگتر از صفر!!!! چون Index ایتم اول 0 هست اونو لود نمیکرد!!!
موفق باشید

vapa_71
جمعه 22 دی 1391, 10:27 صبح
مرتضی جان اونو که میذارم ارور میده

http://s3.picofile.com/file/7551099030/error.jpg

morteza271
جمعه 22 دی 1391, 10:32 صبح
نوع داده ستون animalcode چی هست؟
بعد این خطا رو کی میده؟

vapa_71
جمعه 22 دی 1391, 10:37 صبح
نوع int هست و هنگام ورود به این صفحه که combobox ها داخلش هستند ارور میده

morteza271
جمعه 22 دی 1391, 10:46 صبح
شرط رو به صورت زیر تغییر بدین ببینید درست میشه یا نه :

if (comboBox1.SelectedIndex >= 0 && comboBox1.SelectedValue != null && !string.IsNullOrEmpty(comboBox1.SelectedValue.ToSt ring()))

vapa_71
جمعه 22 دی 1391, 10:48 صبح
:ناراحت: بازم همون خطا رو میده

morteza271
جمعه 22 دی 1391, 11:15 صبح
عجب!!!!
بعد از این خط
SqlDataAdapter da = new SqlDataAdapter("Select animalcode, breed From breed Where animalcode=" + comboBox1.SelectedValue.ToString(), Con);
کد زیر رو بذار تا پیام بده ببینم متن کوئری چیه که این خطا رو میده!!!
MessageBox.Show(da.da.SelectCommand.CommandText);
متن پیامش رو بذار تا ببینم چیه؟

vapa_71
جمعه 22 دی 1391, 11:21 صبح
http://s2.picofile.com/file/7616307197/error2.jpg

morteza271
جمعه 22 دی 1391, 11:25 صبح
خوب پس کوئری اشتباهه!یعنی نتیجه combobox1.SelectedValue.ToString درست نیست!!!

کد تابع FillCombo_AnimalType رو به صورت زیر تغییر بده :
private void FillCombo_AnimalType()
{
SqlDataAdapter da = new SqlDataAdapter("Select animalcode, animalkind From animaltype", Con);
DataTable dt = new DataTable();
da.Fill(dt);

comboBox1.DisplayMember = "animalkind";
comboBox1.ValueMember = "animalcode";
comboBox1.DataSource = dt;
}

اگه بازم خطا داد کد همین تابع FillCombo_AnimalType رو برام بذار.
شما تغییرش دادین یا همون کد من رو استفاده کردین؟؟

vapa_71
جمعه 22 دی 1391, 11:29 صبح
دمت گرم داداش مرتضی بخدا شرمندتم خیلی لطف کردی نمیدونم چطور تشکر کنم مرسیییییییییییییییییییییی یییییییییی درست شد

morteza271
جمعه 22 دی 1391, 11:38 صبح
خوب خداروشکر...
خواهش میکنم دوست عزیز.
موفق باشید