PDA

View Full Version : combo box



golagha_program
سه شنبه 28 آذر 1385, 12:01 عصر
سلام
به یک مشکل عجیب بر خوردم که بد جور پکرم کرده.2 تا کمبو باکس دارم اولی رو با یک دیتاست پر می کنم اگر کاربر آیتمی از کمبو اول انتخاب کرد کمبو دوم بر اساس انتخاب اول خودش رو پر می کند.نمی دونم در کدام رویداد باید این کار را انجام بدم در selected index change کومبو اول کد نوشتم نشد تنها راه حلی که پیدا کردم در رویداد کیلیک کمبو دوم کد نوشتم که خیلی ضایع شد.حالا باید چیکار کنم.

ghafoori
سه شنبه 28 آذر 1385, 12:38 عصر
دوست عزیز چرا از رویدادهای TextChanged یا SelectedValueChanged استفاده نمی کنی
مثلا یک همچین کدی


Private Sub ComboBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.TextChanged
ComboBox2.Items.Clear()
Select Case Me.ComboBox1.Text
Case "1"
ComboBox2.Items.Add(1)
ComboBox2.Items.Add(1)
Case "2"
ComboBox2.Items.Add(2)
ComboBox2.Items.Add(2)
Case "3"
ComboBox2.Items.Add(3)
ComboBox2.Items.Add(3)
Case "4"
ComboBox2.Items.Add(4)
ComboBox2.Items.Add(4)
End Select
End Sub

golagha_program
سه شنبه 28 آذر 1385, 13:23 عصر
سلام
ببینید روش شما درست ولی پاسخگوی من نیست.
کمبو اول از بانک نام 300 نفر را نمایش می دهد.کمبو دوم بر اساس کمبو اول محصولات مورد علاقه فرد انتخابی از کمبو اول را می خواهد نمایش دهد در هر رویداد کمبو اول کد نوشتم ایراد گرفت.
کمبو اول را اینگونه پر کردم
objdataadaptervisitor.Fill(objdataset, "visitor");
cboinvoicevisname.DataSource = objdataset.Tables["visitor"];
cboinvoicevisname.DisplayMember = "name";
cboinvoicevisname.ValueMember = "visID";
cboinvoicevisname.SelectedIndex = -1;
فقط می توانم در رویداد کلیلک کمبو دوم این کد را بنویسم
private void cbobname_Click(object sender, EventArgs e)
{
String _strbarber = "SELECT bID,bname From Tblbarber WHERE visID=" + cboinvoicevisname.SelectedValue;
SqlDataAdapter dabarber = new SqlDataAdapter(_strbarber, objconnection);
DataSet objdataset1 = new DataSet();

dabarber.Fill(objdataset1, "barber");
cbobname.DataSource = objdataset1.Tables["barber"];
cbobname.DisplayMember = "bname";
cbobname.ValueMember = "bID";
}
ولی من می خوام در یکی از رویداد های کمبو اول کدم را بنویسم ولی با مشکل مواجه شده ام.
اگر یک sample سریع برای خودتان بنویسید متوجه خواهید شد چه می گویم
با تشکر

سار
سه شنبه 28 آذر 1385, 13:35 عصر
با فرض اینکه درک من درست باشه خواهیم داشت:
دو جدول هست که با هم ارتباط یک به چند دارند.
من پیشنهاد میدهم بین این دو جدول Relation بزنید. جدول اول را به کمبوی اول وصل کنیدو جدول دوم را به جدول حاصل این Relation اتصال دهید.
من تا به حال این روش را امتحان نکردم ولی تصور میکنم خیلی ساده جواب بدهد.
من نیز مانند شما امتحان میکنم ببینم جواب میدهد یا نه.

golagha_program
سه شنبه 28 آذر 1385, 17:06 عصر
سلام
توی رویداد leave کومبو اول کد رو نوشتم کمی بهتر شد. ولی در صورتی کومبو دوم پر می شه که از کومبو اول خارج شم.بدنبال راهکار بهترم

ghafoori
سه شنبه 28 آذر 1385, 17:59 عصر
golagha_program جان من روش شما را نمی پسندم خیلی طول می کشه من توی پروژه های قبلیم برای اینکار همه تمام جدول هام را داخل دیتاست لود می کردم سپس با دیتاویو انرا فیلتر می کردم در این کار لازم نیست دائم به بانک وسل شی و سرعت ان بسیار بالاست مثلا کد شما به این صورت در می اید
قسمت پرکردن



objdataadaptervisitor.Fill(objdataset, "visitor");
cboinvoicevisname.DataSource = objdataset.Tables["visitor"];
cboinvoicevisname.DisplayMember = "name";
cboinvoicevisname.ValueMember = "visID";
cboinvoicevisname.SelectedIndex = -1;
//فقط می توانم در رویداد کلیلک کمبو دوم این کد را بنویسم
String _strbarber = "SELECT bID,bname From Tblbarber";
SqlDataAdapter dabarber = new SqlDataAdapter(_strbarber, objconnection);
DataSet objdataset1 = new DataSet();

dabarber.Fill(objdataset1, "barber");قسمت رویداد


DataView dv = objdataset1.Tables["barber"].DefaultView;
dv.RowFilter = "visID=" + cboinvoicevisname.SelectedValue;
cbobname.DataSource = dv;
cbobname.DisplayMember="bname";
cbobname.ValueMember = "bID"; البته اینکار برای وقتی است که مطمئن باشید که در طول عملیات شما بانک تغییر نمی کند که اگر برنامه شما چند کاربره نباشد این اتفاق هیچ وقت نمیافتد

golagha_program
سه شنبه 28 آذر 1385, 18:56 عصر
دوست عزیز و خوبم .کاملا" درست و این کد من بسیار سرعت گیره و dataview که نمایشی از dataset با سرعت بالایی جستجو رو انجام می ده.از راهنمایی شما ممنونم.