(向下滚动到帖子底部以找到解决方案。)
得到了一个asp.net页面,其中包含一个
数据 list 。在此数据列表中,
是包含一个
下拉列表,并且每次
数据列表中填充了一个项目,
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*
我已经缩小了代码的范围
查看,但您仍然可以看到
我正在尝试做:)的原因
为什么我要这样做,而不是声明
颜色的数据源直接
我的aspx页面,是我需要运行一个
测试if(showColors),但我不想
用代码弄乱html页面
我觉得应该在代码中
落后文件。
编辑:尝试更改后
SelectedIndexChange-我有一个
现在我脑海中出现“逻辑上的”困惑-
我如何更改内部的元素
资料 list ?据我所知-我
没有任何方法来检查哪个
数据列表中的项目
特定的下拉列表属于...
或者?我将尝试一些方法
看看我最终会得到什么;)但是
请对此发表您的想法
问题 :)
解决方案:
要么将事件冒泡到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事件。