dropdownList的无法选择多项的问题

花了心的大萝卜 2012-06-05 04:57:09
A.aspx中
dropdownlist是查询数据库中的类别后,
protected void DDLCGBind()
{
//查询所有类别,绑定到dropdownlist控件中

CategoryBLL categoryBLL = new CategoryBLL();
IList<BPMCategory> listCategory = categoryBLL.GetAllCategory();
ddlCategory.DataSource = listCategory;
ddlCategory.DataValueField = "ID";
ddlCategory.DataTextField = "Category";
ddlCategory.DataBind();
}


再新建了一个项
ListItem newListItem1 = new ListItem();
newListItem1.Value = "0";
newListItem1.Text = "所有类别";
ddlCategory.Items.Insert(0, newListItem1);


从B.aspx页面返回到A.aspx页面的时候,回传了一个参数,也就是ID值
这时候希望dropdownlist能够选中相同ID值的项
测试的时候,发现ddlCategory.SelectedIndex总是等于0,也就是我新增的这项
网上查询了一下,有人也提出了类似问题,给出了一些方法,我尝试了一下:
无论用ddlCategory.ClearSelection();方法还是ddlCategory.SelectedIndex=-1;还是

for (int i = 0; i < ddlCategory.Items.Count; i++)
{
if (ddlCategory.Items[i].Value == urlIDcg.ToString())
{
ddlCategory.SelectedIndex = i;
break;
}
}

都无法改变选中项,然后报错,求各位指点一二,小弟不胜感激。
...全文
259 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
孟子E章 2012-06-06
  • 打赏
  • 举报
回复
谁说的允许改变ddlCategory.SelectedIndex了?
是你没使用好吧?
  • 打赏
  • 举报
回复
非空的。[Quote=引用 9 楼 的回复:]

判断一下如果传过来的id不为空

this.ddlCategory.SelectedValue = id.ToString();
[/Quote]
  • 打赏
  • 举报
回复
不是这个原因呢,不过问题已经解决,多谢!
  • 打赏
  • 举报
回复
我放置dropdownlist用于联动,也就是选择发生改变以后,下面的repeater控件马上重新绑定数据。可以多选的Listbox不是我想选择的控件。现在的问题是dropdownlist因为先绑定了数据,后来再插入一项,导致dropdownlist的选中项一直定位在新插入的这一项。内部的机制我不明白,所以就取消了原来的方法,先获取数据,在数据中插入一项后,再重新绑定,这样子以后,就允许改变ddlCategory.SelectedIndex[Quote=引用 8 楼 的回复:]

ListBox 才能多选,dropdownList只能单选

<asp:ListBox ID="x" runat="server" SelectionMode="Multiple"></asp:ListBox>
[/Quote]
lichanyon 2012-06-06
  • 打赏
  • 举报
回复
ListItem newListItem1 = new ListItem();
newListItem1.Value = "0";
newListItem1.Text = "所有类别";
ddlCategory.Items.Insert(0, newListItem1);
上面这些是在ddlCategory的OnDataBound事件里面加的么?



虫子007 2012-06-06
  • 打赏
  • 举报
回复
判断一下如果传过来的id不为空

this.ddlCategory.SelectedValue = id.ToString();
孟子E章 2012-06-06
  • 打赏
  • 举报
回复
ListBox 才能多选,dropdownList只能单选

<asp:ListBox ID="x" runat="server" SelectionMode="Multiple"></asp:ListBox>
licai1210 2012-06-06
  • 打赏
  • 举报
回复
ddlCategory.Items.Insert(0, newListItem1);这个后面
加上ddlCategory.ClearSelection();
然后加上ddlCategory.Items.FindByValue("传过来的ID").Selected=true;
JJYY0088 2012-06-05
  • 打赏
  • 举报
回复
是不是回发了

if(!IsPostBack)
{
DDLCGBind();
//再加一项....
}
  • 打赏
  • 举报
回复
首先谢谢你的回答,但是问题不是出在这里,原因我还是没有找到,我猜想应该是我先绑定了数据后,再重新插入了一个项,可能是这个原因导致无法在page onload中修改dropdownlist的selectedindex选项吧。所以我直接在获取到List对象数据后,在list中增加了一个项,然后再绑定,就没有出现之前的问题了。[Quote=引用 4 楼 的回复:]

ddlCategory.Items.FindByValue("传过来的ID").Selected=true;
[/Quote]
licai1210 2012-06-05
  • 打赏
  • 举报
回复
ddlCategory.Items.FindByValue("传过来的ID").Selected=true;
  • 打赏
  • 举报
回复
求解惑!
  • 打赏
  • 举报
回复
回传的时候是重定向,if(!Ispostback){}中的内容测试了一下,是有执行下去的[Quote=引用 1 楼 的回复:]

Request.Form取一下子。可能是回传的时Ispostback没有再往下面执行下去。但是页面上的值是存在的
[/Quote]
sfxuser 2012-06-05
  • 打赏
  • 举报
回复
Request.Form取一下子。可能是回传的时Ispostback没有再往下面执行下去。但是页面上的值是存在的

62,267

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧