ComboBox آبشاری در #C
جمعه 24 مهر 1394در این مقاله قصد داریم علاوه بر پر کردن ComboBox در سی شارپ به نحوه ارتباط دو ComboBox یا همان Cascading بپردازیم و همچنین میخواهیم یک برنامه ایجاد کنیم که باانتخاب ComboBox اول ، اطلاعات مربوط به ComboBox دوم نیز درج شود.
در آموزش قصد داریم یک برنامه با Combox ایجاد کنیم که در Combox اول اسم شهر و در Combox دوم اسامی شهر باشد و کار با انتخاب استان ، شهر های مربوط به همان استان در combox بعدی به نمایش در بیاید.
برای شروع یک بانک اطلاعاتی به نام Combx که حاوی دو جدول است ایجاد میکنیم
همان طور که مشاهده میکنید برای برقراری ارتباط بین دو جدول یک فلید مشترک بین هر دو گرفته ایم که به صورت زیر آن دو را به هم وصل کرده ایم (به این کار اصطلاحا Relationships گفته میشود )
بعد از انتخاب گزینه Relationships با صفحه ای مانند زیر رو رو میشوید که در این صفحه دکمه Add را میزنیم
و در انتها برای بر قرای ارتیاط با زدن دکمه Table Add... ارتباط بین فیلد های را مشخص میکنیم
حال پس از ایجاد بانک اطلاعاتی ویژوال استادیو را باز کرده ویک پروژه از نوع Window from ایجاد میکنیم
حال در form خود از دو combox استفاده میکنیم
حال ما با دو تابع کار خود را شروع میکنیم در تابع refreshdata اطلاعات مربوط به جدول tbl_country را از بانک اطلاعاتی گرفته ایم.
public void refreshdata() { con.Open(); SqlCommand cmd = new SqlCommand("select * from tbl_country", con); SqlDataAdapter sda = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); sda.Fill(dt); con.Close(); dr = dt.NewRow(); dr.ItemArray = new object[] { 0, "--انتخاب کشور--" }; dt.Rows.InsertAt(dr, 0); comboBox1.ValueMember = "countryid"; comboBox1.DisplayMember = "countryname"; comboBox1.DataSource = dt; }
و در تابع refreshstate اطلاعات مربوط به جدول tbl_state را از بانک اطلاعاتی گرفته ایم
public void refreshstate(int countryid) { con.Open(); SqlCommand cmd = new SqlCommand("select * from tbl_state where countryid= @countryid", con); cmd.Parameters.AddWithValue("countryid", countryid); SqlDataAdapter sda = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); sda.Fill(dt); con.Close(); dr = dt.NewRow(); dr.ItemArray = new object[] { 0, "--انتخاب شهر--" }; dt.Rows.InsertAt(dr, 0); comboBox2.ValueMember = "stateid"; comboBox2.DisplayMember = "statename"; comboBox2.DataSource = dt; }
حال در رویداد SelectedIndexChanged ، کومباکس اولی قطعه کد زیر را برای پر کردن combox دومی مینویسیم
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { if (comboBox1.SelectedValue.ToString()!= null) { int countryid = Convert.ToInt32(comboBox1.SelectedValue.ToString()); refreshstate(countryid); } }
و در انتها میتوان قسمت کامل مرحل بالا را مشاهد کنید
public partial class Form1 : Form { SqlConnection con = new SqlConnection(@"Data Source=.;Initial Catalog=Combox;User id=sa;Password=123"); DataRow dr; public Form1() { InitializeComponent(); refreshdata(); } public void refreshdata() { con.Open(); SqlCommand cmd = new SqlCommand("select * from tbl_country", con); SqlDataAdapter sda = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); sda.Fill(dt); con.Close(); dr = dt.NewRow(); dr.ItemArray = new object[] { 0, "--انتخاب کشور--" }; dt.Rows.InsertAt(dr, 0); comboBox1.ValueMember = "countryid"; comboBox1.DisplayMember = "countryname"; comboBox1.DataSource = dt; } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { if (comboBox1.SelectedValue.ToString()!= null) { int countryid = Convert.ToInt32(comboBox1.SelectedValue.ToString()); refreshstate(countryid); } } public void refreshstate(int countryid) { con.Open(); SqlCommand cmd = new SqlCommand("select * from tbl_state where countryid= @countryid", con); cmd.Parameters.AddWithValue("countryid", countryid); SqlDataAdapter sda = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); sda.Fill(dt); con.Close(); dr = dt.NewRow(); dr.ItemArray = new object[] { 0, "--انتخاب شهر--" }; dt.Rows.InsertAt(dr, 0); comboBox2.ValueMember = "stateid"; comboBox2.DisplayMember = "statename"; comboBox2.DataSource = dt; }
لاز م بذکر است که ما در این آموزش برای برقراری با بانک اطلاعاتی از ADo.Net استفاده کردیم.
- C#.net
- 10k بازدید
- 12 تشکر