当前位置: 代码迷 >> ASP.NET >> :DropDownList.SelectedItem.Text的值不接受用户的更改,总是读取0号索引的值?
  详细解决方案

:DropDownList.SelectedItem.Text的值不接受用户的更改,总是读取0号索引的值?

热度:7327   发布时间:2013-02-25 00:00:00.0
在线等: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   了

------解决方案--------------------------------------------------------
看代码似乎没有问题.


DataSet ds = mms.MMSDataBase_SelectMusicChoice (DropDownList2.SelectedItem.Text);
  相关解决方案