(向下滚动到帖子底部以找到解决方案。)

得到了一个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事件。

10-04 16:25