在线等: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往数据库