在线等:DropDownList.SelectedItem.Text的值不接受用户的更改,总是读取0号索引的值??
问题的概括说明:我想在一个页面使用两个DropDownList控件,每个控件索引的内容都是从数据库里面取得。想根据用户选择第一个DropDownList的值来动态的邦定第二个DropDownList里面的内容。但是我用调试跟踪了一下,发现用户在界面上改变第一个DropDownList的值,在之后第二个重新邦定还是根据第一个的DropDownList的0号索引来取值。
下面代码分析的比较多,可能这个问题很简单,请GGLL们一同帮小弟解决。在此感谢大家了。
问题代码的分析:.aspx.cs文件
(注明:下面的代码中所说的第一个DropDownList是DropDownList2
第二个DropDownList是DropDownList1)
private void Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack)
{
MusicTypeLoad();//初始化第一个DropDownList的内容,从数据库中读取,
//测试阶段有三个值,为音乐的类型,“搞笑”“流行”“经典”
MusicLoad(); //根据第一个DropDownList用户选择的内容,来设置第二个
//DropDownList的内容,为音乐的名称。
//这两个出生始化函数读取数据库时,都是从一张表。
}
// 在此处放置用户代码以初始化页面
}
private void MusicTypeLoad()
{
MMSDataBase_Operation mms = new MMSDataBase_Operation();
DataSet ds = mms.MMSDataBase_SelectMusicType();
//上面是数据库操作,读出音乐的类型,来设置第一个DropDownList
if(DropDownList2.Items.Count != ds.Tables[0].Rows.Count)
{
for(int i = 0;i <ds.Tables[0].Rows.Count;i++)
{
ListItem listItem = new ListItem();
DropDownList2.Items.Add(listItem);
DropDownList2.Items[i].Text = ds.Tables[0].Rows[i][0].ToString();
}
}
}
private void MusicLoad()
{
MMSDataBase_Operation mms = new MMSDataBase_Operation();
DataSet ds = mms.MMSDataBase_SelectMusicChoice (DropDownList2.SelectedItem.Text);
//上面是数据库操作,根据第一个DropDownList,也就是DropDownList2中用户 选择的值来设置第二DropDownList。
DropDownList1.Items.Clear();
for(int j = 0;j <ds.Tables[0].Rows.Count;j++)
{
ListItem listItem = new ListItem(); DropDownList1.Items.Add(listItem); DropDownList1.Items[j].Text = ds.Tables[0].Rows[j][1].ToString();
}
}
private void DropDownList2_SelectedIndexChanged(object sender, System.EventArgs e)
//第一个DropDownList,即DropDownList2改变选择的值时发生的事件,
{
MusicLoad();//动态的设置第二个DropDownList
}
页面的过程:
页面初始化,包括初始化两个DropDownList。
当用户改变第一个DropDownList,即DropDownList2得值时,进入MusicLoad(),重新根据第一个DropDownList设置第二个DropDownList的值。
但现在问题就出现在这,页面第一次初始化时,两个DropDownList都被初始后了,第二个是根据第一个0号索引初始化的。但当用户改变选择时,还是根据0号索引。
我第一个DropDownList的AutoPostBack设置为TRUE 了
------解决方案--------------------