1.问题描述
表数据如下(一个xlbm对应多个clbm):
clbm xlbm
001 111
002 111
003 111
101 222
102 222
501 555
506 555
508 555
509 555
动态加载数据到DropDownList代码如下:
这样加载完下拉列表数据没有问题
2.当我调用其select方法的时候代码如下:
protected void ddlData_SelectedIndexChanged(object sender, EventArgs e)
{
this.txtClBm.Text = this.ddlClbm.SelectedItem.Text;
this.txtXlBm.Text = this.ddlClbm.SelectedValue;
}
3.假如现在选择001,等一下this.txtClBm.Text显示为(001)和this.txtXlBm.Text显示为(111)--正常
但是当我选择003或者002之后,this.txtClBm.Text显示为(001)和this.txtXlBm.Text显示为(111)--错误
然后再选择501,this.txtClBm.Text显示为(501)和this.txtXlBm.Text显示为(555)--正常
但是当我选择506之后,this.txtClBm.Text显示为(501)和this.txtXlBm.Text显示为(555)--错误
再选择102之后,this.txtClBm.Text显示为(101)和this.txtXlBm.Text显示为(222)--错误
也就是说我无论选择002或者003其this.txtClBm.Text始终显示001;无论选择506或509,this.txtClBm.Text始终显示501
但实际上选择不同xlbm对应的clbm,this.txtXlBm.Text却能正常改变
4.结论:只要是value相同的item,无论选择哪一个,结果this.ddlClbm.SelectedItem.Text始终都是这组相同value的item的第一个项
我调试过查看其index也始终都是该组的第一个.
问题:为什么会这样?有办法解决吗?
ps:假如xlbm和clbm是一对一的关系就不会出现这个问题
this.ddlData.Items.Add(sdr["clbm"].ToString(),sdr["xlbm"].ToString());
这句不行吧,add方法根本就没有带两个参数的
就是啊,你用的哪一个版本的VS哟?
估计是早期的版本,而且Key和Value搞反了。
试试这个:
string sql = "select clbm,xlbm from [tXlCl] order by clbm";
SqlDataReader sdr = myFun.Datareader(sql);
ListItem list;
while (sdr.Read())
{
//显示用clbm,选项的值为xlbm
list = new ListItem("Text", "Value");
this.ddlData.Items.Add(list);
}
sdr.Close();
Page.IsPostBack
4.结论:只要是value相同的item,无论选择哪一个,结果this.ddlClbm.SelectedItem.Text始终都是这组相同value的item的第一个项
我调试过查看其index也始终都是该组的第一个.
你的这个结论有问题吗?.应该是正茬功能的啊。
毕竟你的value是一样的,那你还想在三次选择操作中,一样的值都还有变化啊,value是key的作用。
this.ddlData.Items.Add(sdr["clbm"].ToString(),sdr["xlbm"].ToString()); 这句话有问题 你改成如下:
ListItem item = new ListItem();
item.Value = sdr["xlbm"].ToString();
item.Text =sdr["clbm"].ToString();
this.ddlData.Items.Add(item);
问题就应该解决了?
不过这样子写还是有问题的,因为sdr["xlbm"].ToString();值有重复,因此你使用this.ddlClbm.SelectedValue选择值的时候会出现重复的几个值,此时就会出现控件取值的时候会默认的去获取最先检索到的那个index项的值,因此就会出现你这样子的错误。
DropDownList控件原本就是Html控件中的select控件,所以原理是一样的。这里可以允许Text值为重复,但是value值不可以重复.
所以这里你只能是让添加的value值唯一即可
应该是你的key和value值搞反了!!
绝大部分情况下绑定dropdownlist中的key值是唯一的!
如果key不唯一,确实会出现你碰到的这个问题!
这应该是dropdownlist有意文之的。