比如数据库中有两个表,一个系部表depart,字段departId,departname一个专业表major,字段majorId,departId,majorname
怎么实现选一个系部的时候,另一个COMBOBOX里面是现实的是与这系部有关的专业
今天弄很久了,都没弄明白

解决方案 »

  1.   

    ado.net里有个什么主从表可以的吧
      

  2.   

    在第一系部COMBOBOX里,定义一个SelectedIndexChanged事件,
    在事件中写上 取第二个COMBBOX的数据源代码,重新赋值第二个COMBOBOX的数据源
    我是这样弄的,更直接点!
      

  3.   

    同意樓上。
    在第一個Combox,當選擇的內容變化時,再加載第二個Combox的數據,條件則是第一個Combox的變換後的內容。
      

  4.   

    同意4楼的,要在第一个COMBOX的SelectedIndexChanged事件,再去搜索你要第二个COMBOX事件
      

  5.   

       private void Form1_Load(object sender, EventArgs e)
            {
                SqlConnection con = new SqlConnection(conn);
                con.Open();
                SqlCommand cmd = new SqlCommand("select * from department",con);
                SqlDataAdapter sda = new SqlDataAdapter(cmd);
                DataTable dt = new DataTable();
                sda.Fill(dt);
                con.Close();
                comboBox1.DataSource = dt;
                comboBox1.DisplayMember = "department";
                comboBox1.ValueMember = "departmentId";        }        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                
                     SqlConnection con = new SqlConnection(conn);
                     con.Open();
                     SqlCommand cmd = new SqlCommand("select * from major where departmentId='"+comboBox1.SelectedValue.ToString()+"'",con);
                     SqlDataAdapter sda = new SqlDataAapter(cmd);
                     DataTable dt = new DataTable();
                     
                         comboBox2.DataSource = dt;
                         comboBox2.DisplayMember = "major";
                         comboBox2.ValueMember = "majorId";
                   
               
             
            }为什么这样就不对呢??
      

  6.   

    我们不直接用sqlDataSource绑定呢?
      

  7.   

    问题已解决,自己好不容易想出来,居然没人帮代码如下private void Form1_Load(object sender, EventArgs e)
            {
                SqlConnection con = new SqlConnection(conn);
                con.Open();
                SqlCommand cmd = new SqlCommand("select * from department",con);           
                SqlDataAdapter sda = new SqlDataAdapter(cmd);
                DataTable dt = new DataTable();
                sda.Fill(dt);
                con.Close();
                comboBox1.DataSource = dt;
                comboBox1.DisplayMember = "department";
                comboBox1.ValueMember = "departmentId";        }        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (comboBox1.SelectedIndex>-1)
                {
                    DataRowView drv = (DataRowView)comboBox1.SelectedItem;
                    int id = Convert.ToInt32(drv.Row["departmentId"].ToString());
                    SqlConnection con = new SqlConnection(conn);
                    con.Open();
                    SqlCommand cmd = new SqlCommand("select * from major where departmentId='" + id + "'", con);
                    SqlDataAdapter sda = new SqlDataAdapter(cmd);             
                    DataTable dt = new DataTable();
                    sda.Fill(dt);
                    comboBox2.DataSource = dt;
                    comboBox2.DisplayMember = "major";
                    comboBox2.ValueMember = "majorId";
                }
                    
                   
               
              
            }
      

  8.   

    现在我要实现3个combobox联动又出现问题了,像我这样写又不对了
    怎么改进 private void cmbDpt_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (cmbDpt.SelectedIndex > -1)
                {
                    DataRowView drv = (DataRowView)cmbDpt.SelectedItem;
                    int id = Convert.ToInt32(drv.Row["departmentId"].ToString());
                    DataTable dt = new SQLHelper().getResultToDataTable("select * from major where departmentId='" + id + "'");
                    cmbMajor.DataSource = dt;
                    cmbMajor.DisplayMember = "major";
                    cmbMajor.ValueMember = "majorId";
                }
            }        private void cmbMajor_SelectedIndexChanged(object sender, EventArgs e)
            {
              
                    DataRowView drv = (DataRowView)cmbMajor.SelectedItem;
                    int id = Convert.ToInt32(drv.Row["majorId"].ToString());
                    DataTable dt = new SQLHelper().getResultToDataTable("select * from class where majorId='" + id + "'");
                    cmbClass.DataSource = dt;
                    cmbClass.DisplayMember = "className";
                    cmbClass.ValueMember = "classId";
                        }
    这个是在第2个COMBOBOX那SelectedIndexChanged事件里,写的,可是当第一个动的时候要怎么实现第3个也跟着动了
      

  9.   

    在cmbDpt_SelectedIndexChanged里Items.Clear();
    在cmbMajor_SelectedIndexChanged里再绑定第三个或查询数据直接绑定
      

  10.   

    COMBOBOX.SelectedIndexChanged += 想多少个联动,想干什么都行,只要吧SelectedIndexChanged时要做的动作都加上就行了
      

  11.   


    private void cmbDpt_SelectedIndexChanged(object sender, EventArgs e)
    {
    bindMajor();
    bindClass();
    }
    private void cmbMajor_SelectedIndexChanged(object sender, EventArgs e)
    {
    bindClass();
    }
      

  12.   


    有道理,要找个好点的办法。
    如:
    private void cmbDpt_SelectedIndexChanged(object sender, EventArgs e)
    {
        bindMajor();
        bindClass();
    }
    private void cmbMajor_SelectedIndexChanged(object sender, EventArgs e)
    {
        bindClass();
    }
      

  13.   

    给你一个年月日关联的例子吧
    private void cmbYear_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (this.cmbYear.Text != "----")
                {
                    this.cmbMonth.Enabled = true;
                    int year, month, day = 0;                year = Convert.ToInt32(this.cmbYear.Text.ToString());
                    if (this.cmbMonth.Text.ToString() == "" || this.cmbMonth.Text.ToString() == "--")
                    {
                        month = Convert.ToInt32(DateTime.Now.Month.ToString());
                    }
                    else
                    {
                        month = Convert.ToInt32(this.cmbMonth.Text.ToString());
                    }
                    day = DateTime.DaysInMonth(year, month);
                    this.cmbDay.Items.Clear();
                    this.cmbDay.Items.Add("--");
                    for (int i = 1; i <= day; i++)
                    {
                        if (i < 10)
                        {
                            this.cmbDay.Items.Add('0' + i.ToString());
                        }
                        else
                        {
                            this.cmbDay.Items.Add(i.ToString());
                        }
                    }
                    if (this.cmbMonth.Text.ToString() == "" || this.cmbMonth.Text.ToString() == "--")
                    {
                        this.cmbDay.Text = "--";
                    }
                    else
                    {
                        if (DateTime.Now.Day.ToString().Length == 1)
                        {
                            this.cmbDay.Text = '0' + DateTime.Now.Day.ToString();
                        }
                        else
                        {
                            this.cmbDay.Text = DateTime.Now.Day.ToString();
                        }
                    }
                }
                else
                {
                    this.cmbMonth.Text = "--";
                    this.cmbMonth.Enabled = false;
                    this.cmbDay.Text = "--";
                    this.cmbDay.Enabled = false;
                }
            }        private void cmbMonth_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (this.cmbMonth.Text != "--")
                {
                    this.cmbDay.Enabled = true;
                    int year, month, day = 0;                year = Convert.ToInt32(this.cmbYear.Text.ToString());
                    if (this.cmbMonth.Text.ToString() == "")
                    {
                        month = Convert.ToInt32(DateTime.Now.Month.ToString());
                    }
                    else
                    {
                        month = Convert.ToInt32(this.cmbMonth.Text.ToString());
                    }
                    day = DateTime.DaysInMonth(year, month);
                    this.cmbDay.Items.Clear();
                    this.cmbDay.Items.Add("--");
                    for (int i = 1; i <= day; i++)
                    {
                        if (i < 10)
                        {
                            this.cmbDay.Items.Add('0' + i.ToString());
                        }
                        else
                        {
                            this.cmbDay.Items.Add(i.ToString());
                        }
                    }
                    if (DateTime.Now.Day.ToString().Length == 1)
                    {
                        this.cmbDay.Text = '0' + DateTime.Now.Day.ToString();
                    }
                    else
                    {
                        this.cmbDay.Text = DateTime.Now.Day.ToString();
                    }
                }
                else
                {
                    this.cmbDay.Text = "--";
                    this.cmbDay.Enabled = false;
                }
            }当选择年为----时,月日都为--,当选择月为--时,日为--,当选择年月为具体值时,日加载的是对应的天数和--,你可以这样借鉴一下三个combox关联的问题