combobox数据绑定以后SelectedIndexChanged事件无法触发咋办
combobox数据绑定之后SelectedIndexChanged事件无法触发咋办?
功能是窗体运行的时候从数据库加载数据绑定到combobox 然后通过下拉框选择一个院系 listbox中可以显示该院系对应的专业 可是运行的时候怎么改变下拉框的选项 listbox显示的还是第一个院系对应的专业 怎么破? 新手求教育~~
这是窗体加载的代码:
private void fmAddStudent_Load(object sender, EventArgs e)
{
timer1.Enabled = true;
DataTable table = SqlHelper.DataTable("select * from T_YuanXi where Pid = 0");
foreach (DataRow row in table.Rows)
{
YuanXi yx = new YuanXi();
yx.Id = (int)row["Id"];
yx.Name = (string)row["Name"];
yuanxi.Add(yx);
}
cmbYuanXi.DataSource = yuanxi;
cmbYuanXi.DisplayMember = "Name";
cmbYuanXi.ValueMember = "Name";
}
这是combobox的事件代码:
private void cmbYuanXi_SelectedIndexChanged(object sender, EventArgs e)
{
YuanXi yx = (YuanXi)cmbYuanXi.SelectedItem;
DataTable table = SqlHelper.DataTable("select * from T_YuanXi where Pid = @Id", new SqlParameter("@Id", yx.Id));
foreach (DataRow row in table.Rows)
{
YuanXi yx1 = new YuanXi();
yx1.Id = (int)row["Id"];
yx1.Name = (string)row["Name"];
yuanxi1.Add(yx1);
}
listZhuanYe.DataSource = yuanxi1;
listZhuanYe.DisplayMember = "Name";
listZhuanYe.ValueMember = "Name";
}
------解决方案--------------------
第一: cmbYuanXi.DisplayMember = "Name";
cmbYuanXi.ValueMember = "Name";这二个绑定的都是 NAME 没有ID ,而你后面取专业数据的SQL语句是select * from T_YuanXi where Pid = @Id", commbox根本取不到ID,所以你的专业应该是取不出来的
第二:YuanXi yx = (YuanXi)cmbYuanXi.SelectedItem; 你抓一下断点,好像直接从SelectedItem是无法强转为你自定义的类型的。
------解决方案--------------------
cmbYuanXi.ValueMember = "Name";
=>
cmbYuanXi.ValueMember = "Id";
yuanxi1.Clear();
foreach (DataRow row in table.Rows)
{
YuanXi yx1 = new YuanXi();
yx1.Id = (int)row["Id"];
yx1.Name = (string)row["Name"];
yuanxi1.Add(yx1);
}
------解决方案--------------------
AutoPostBack=true;
这个属性你设置了没有?如果不设置或为false是不是触发的
------解决方案--------------------
功能是窗体运行的时候从数据库加载数据绑定到combobox 然后通过下拉框选择一个院系 listbox中可以显示该院系对应的专业 可是运行的时候怎么改变下拉框的选项 listbox显示的还是第一个院系对应的专业 怎么破? 新手求教育~~
这是窗体加载的代码:
private void fmAddStudent_Load(object sender, EventArgs e)
{
timer1.Enabled = true;
DataTable table = SqlHelper.DataTable("select * from T_YuanXi where Pid = 0");
foreach (DataRow row in table.Rows)
{
YuanXi yx = new YuanXi();
yx.Id = (int)row["Id"];
yx.Name = (string)row["Name"];
yuanxi.Add(yx);
}
cmbYuanXi.DataSource = yuanxi;
cmbYuanXi.DisplayMember = "Name";
cmbYuanXi.ValueMember = "Name";
}
这是combobox的事件代码:
private void cmbYuanXi_SelectedIndexChanged(object sender, EventArgs e)
{
YuanXi yx = (YuanXi)cmbYuanXi.SelectedItem;
DataTable table = SqlHelper.DataTable("select * from T_YuanXi where Pid = @Id", new SqlParameter("@Id", yx.Id));
foreach (DataRow row in table.Rows)
{
YuanXi yx1 = new YuanXi();
yx1.Id = (int)row["Id"];
yx1.Name = (string)row["Name"];
yuanxi1.Add(yx1);
}
listZhuanYe.DataSource = yuanxi1;
listZhuanYe.DisplayMember = "Name";
listZhuanYe.ValueMember = "Name";
}
combobox
数据库
------解决方案--------------------
第一: cmbYuanXi.DisplayMember = "Name";
cmbYuanXi.ValueMember = "Name";这二个绑定的都是 NAME 没有ID ,而你后面取专业数据的SQL语句是select * from T_YuanXi where Pid = @Id", commbox根本取不到ID,所以你的专业应该是取不出来的
第二:YuanXi yx = (YuanXi)cmbYuanXi.SelectedItem; 你抓一下断点,好像直接从SelectedItem是无法强转为你自定义的类型的。
------解决方案--------------------
cmbYuanXi.ValueMember = "Name";
=>
cmbYuanXi.ValueMember = "Id";
yuanxi1.Clear();
foreach (DataRow row in table.Rows)
{
YuanXi yx1 = new YuanXi();
yx1.Id = (int)row["Id"];
yx1.Name = (string)row["Name"];
yuanxi1.Add(yx1);
}
------解决方案--------------------
AutoPostBack=true;
这个属性你设置了没有?如果不设置或为false是不是触发的
------解决方案--------------------