语言C#,winform怎么实现combobox联动

ghostql 2009-10-27 04:21:25
比如数据库中有两个表,一个系部表depart,字段departId,departname一个专业表major,字段majorId,departId,majorname
怎么实现选一个系部的时候,另一个COMBOBOX里面是现实的是与这系部有关的专业
今天弄很久了,都没弄明白
...全文
1247 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
bjtiantian 2009-10-29
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 cc_net 的回复:]
COMBOBOX.SelectedIndexChanged +=

想多少个联动,想干什么都行,只要吧SelectedIndexChanged时要做的动作都加上就行了
[/Quote]
这样做没问题,OK
jungeuichul 2009-10-29
  • 打赏
  • 举报
回复
给你一个年月日关联的例子吧
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关联的问题
zxforben111 2009-10-29
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 wu8862889 的回复:]
建议你找个城市级联的例子看下
[/Quote]

有道理,要找个好点的办法。
如:


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

辉太郎 2009-10-28
  • 打赏
  • 举报
回复

private void cmbDpt_SelectedIndexChanged(object sender, EventArgs e)
{
bindMajor();
bindClass();
}
private void cmbMajor_SelectedIndexChanged(object sender, EventArgs e)
{
bindClass();
}
wu8862889 2009-10-28
  • 打赏
  • 举报
回复
建议你找个城市级联的例子看下
AndyGu_Rover 2009-10-28
  • 打赏
  • 举报
回复
像LZ这样写不把人累死啊
flyerwing 2009-10-28
  • 打赏
  • 举报
回复
如十二楼
cc_net 2009-10-28
  • 打赏
  • 举报
回复
COMBOBOX.SelectedIndexChanged +=

想多少个联动,想干什么都行,只要吧SelectedIndexChanged时要做的动作都加上就行了
wuyq11 2009-10-28
  • 打赏
  • 举报
回复
在cmbDpt_SelectedIndexChanged里Items.Clear();
在cmbMajor_SelectedIndexChanged里再绑定第三个或查询数据直接绑定
ghostql 2009-10-28
  • 打赏
  • 举报
回复
没人知道吗??
ghostql 2009-10-27
  • 打赏
  • 举报
回复
现在我要实现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个也跟着动了
lzhdim 2009-10-27
  • 打赏
  • 举报
回复
呵呵,这个不挺简单的么,基本控件的使用问题。。。
aotian798 2009-10-27
  • 打赏
  • 举报
回复
晕 来完了 接分
ghostql 2009-10-27
  • 打赏
  • 举报
回复
问题已解决,自己好不容易想出来,居然没人帮

代码如下
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";
}




}
ITtaowmdj 2009-10-27
  • 打赏
  • 举报
回复
我们不直接用sqlDataSource绑定呢?
ghostql 2009-10-27
  • 打赏
  • 举报
回复
   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";



}


为什么这样就不对呢??
flyfly2008 2009-10-27
  • 打赏
  • 举报
回复
同意4楼的,要在第一个COMBOX的SelectedIndexChanged事件,再去搜索你要第二个COMBOX事件
Flyingdragon168 2009-10-27
  • 打赏
  • 举报
回复
同意樓上。
在第一個Combox,當選擇的內容變化時,再加載第二個Combox的數據,條件則是第一個Combox的變換後的內容。
dalu007 2009-10-27
  • 打赏
  • 举报
回复
在第一系部COMBOBOX里,定义一个SelectedIndexChanged事件,
在事件中写上 取第二个COMBBOX的数据源代码,重新赋值第二个COMBOBOX的数据源
我是这样弄的,更直接点!
ghostql 2009-10-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 itliyi 的回复:]
分数少了。。。
[/Quote]
那你要多少分,写的正确就给你
加载更多回复(2)

110,579

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧