首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

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

2011-12-23 
在线等:DropDownList.SelectedItem.Text的值不接受用户的更改,总是读取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);


DropDownList2.SelectedItem.Text--> 是不是前后选择了一样

[解决办法]
但现在问题就出现在这,页面第一次初始化时,两个DropDownList都被初始后了,第二个是根据第一个0号索引初始化的。但当用户改变选择时,还是根据0号索引。
---------------
再说你也不是按照索引来查询的,你是按照 DropDownList2.SelectedItem.Text
也许索引不一样,DropDownList2.SelectedItem.Text值一样,也会查到相同的结果
[解决办法]
第一个ddl的autopostback设置true了吗?(设了,看到了)
应该不会啊你取DropDownList2.SelectedItem.Text内容出来看一看,
然后查询分析器里运行下看能不能取出,有时候会有一些空格
我建议用
DropDownList1.datasourse=ds;
DropDownList1.textfield =ds.column[1];
DropDownList1.valuefield =ds.column[2];
DropDownList1.databand ();
试试,比较方便(伪代码)
[解决办法]
到底哪个是 1 ,哪个是 2 ,看到头痛 ....
[解决办法]
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();
}
你定义的ListItem有什么用啊
[解决办法]
1.dropdownlist.selectvalue= " "从数据库往dropdownlist
2.dropdownlist.slecetitem.value= " "从dropdownlist往数据库

热点排行