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();
问题已解决,自己好不容易想出来,居然没人帮代码如下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"; }
}
现在我要实现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个也跟着动了
在事件中写上 取第二个COMBBOX的数据源代码,重新赋值第二个COMBOBOX的数据源
我是这样弄的,更直接点!
在第一個Combox,當選擇的內容變化時,再加載第二個Combox的數據,條件則是第一個Combox的變換後的內容。
{
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";
}为什么这样就不对呢??
{
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";
}
}
怎么改进 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个也跟着动了
在cmbMajor_SelectedIndexChanged里再绑定第三个或查询数据直接绑定
private void cmbDpt_SelectedIndexChanged(object sender, EventArgs e)
{
bindMajor();
bindClass();
}
private void cmbMajor_SelectedIndexChanged(object sender, EventArgs e)
{
bindClass();
}
有道理,要找个好点的办法。
如:
private void cmbDpt_SelectedIndexChanged(object sender, EventArgs e)
{
bindMajor();
bindClass();
}
private void cmbMajor_SelectedIndexChanged(object sender, EventArgs e)
{
bindClass();
}
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关联的问题