(向下滚动到帖子底部以查找解决方案。)
得到一个 asp.net 页面,其中包含一个 数据表。在这个数据表里面,有 是一个模板,包含 下拉列表和每次 数据列表中填充了一个项目,一个 ItemCreatedCommand 被调用。这 itemCreatedCommand 负责 数据绑定(bind)下拉列表。
我觉得问题出在这里 我正在使用 ItemCreatedCommand 来 填充它 - 但奇怪的事情 如果我选择“绿色”颜色, 该页面将自动回发,我会 看到下拉菜单仍然在 颜色为绿色,但在尝试使用时 它是 SelectedIndex,我总是得到 0...
protected void DataListProducts_ItemCreatedCommand(object
source, DataListItemEventArgs e)
var itemId = (String)DataListProducts.DataKeys[e.Item.ItemIndex];
var item = itemBLL.GetFullItem(itemId);
var DropDownListColor = (DropDownList)e.Item.FindControl("DropDownListColor");
//Also tried with :
//if(!isPostBack) {
DropDownListColor.DataSource = item.ColorList;
DropDownList.Color.Databind();
// } End !isPostBack)
Label1.test = DropDownListColor.SelectedIndex.toString();
// <- THIS IS ALWAYS 0! *grr*
我已经缩小了代码范围 查看,但你仍然可以看到什么 我正在尝试做 :) 原因 为什么我这样做,而不是声明 颜色的数据源直接 i aspx-page,是我需要运行一个 测试 if(showColors),但我不想 用代码弄乱 html 页面 我觉得应该在代码中 后面的文件。
编辑:在尝试改变之后 SelectedIndexChange - 我有一个 现在我脑子里的“逻辑”困惑- 我如何改变里面的元素 数据表?因为,据我所知——我 没有办法检查哪一个 数据列表中的项目 特定的下拉列表属于... 或者?我会尝试一些方法 看看我最终得到什么 ;) 但是做 请发表您对此的看法 问题 :)
解决方案:
要么将事件冒泡到 ItemCommand,要么处理事件,获取发送者父级(这是一个 datalistItem 并操作其中的元素。
protected void DropDownListColor_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList dropDownListColor = (DropDownList)sender;
DataListItem dataListItem = (DataListItem)dropDownListColor.Parent;
var item = items[dataListItem.ItemIndex];
var color = item.ItemColor[dropDownListColor.SelectedIndex];
var LabelPrice = (Label)dataListItem.FindControl("LabelPrice");
LabelPrice.Text = color.Price;
}
最佳答案
当DataList为数据绑定(bind)时,AutoPostBack尚未处理,即ItemCreated事件中的值仍为原始值。
需要处理下拉控件的SelectedIndexChange事件。
关于c# - DropdownList.selectedIndex 始终为 0(是的,我有 !isPostBack),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/312735/