ComboBox آبشاری در #C

جمعه 24 مهر 1394

در این مقاله قصد داریم علاوه بر پر کردن ComboBox در سی شارپ به نحوه ارتباط دو ComboBox یا همان Cascading بپردازیم و همچنین میخواهیم یک برنامه ایجاد کنیم که باانتخاب ComboBox اول ، اطلاعات مربوط به ComboBox دوم نیز درج شود.

 ComboBox  آبشاری در #C

در آموزش قصد داریم یک برنامه با  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  استفاده کردیم.

آموزش سی شارپ

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 10k بازدید
  • 12 تشکر

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

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید