DropdownList.selectedIndex总是0(是的,我确实有!isPostBack)

时间:2008-11-23 17:21:12

标签: c# asp.net drop-down-menu postback

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

有一个asp.net页面,其中包含一个 数据列表。在这个数据主义者里面 是一个包含a的模板 下拉列表和每次 datalist充满了一个项目,a 调用ItemCreatedCommand。该 itemCreatedCommand负责 数据绑定下拉列表。

我认为问题在于此 我正在使用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 - 我有一个 现在我脑子里有“逻辑”混乱 - 我怎么改变里面的元素 数据列表?因为,据我所知 - 我 没有办法检查哪一个 数据列表中的项目 特别的下拉列表属于...... 要么?我打算尝试一些方法 并看看我最终得到了什么;)但是 请发表您的想法 问题:)

解决方案:

要么将事件冒泡到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; 
        }

4 个答案:

答案 0 :(得分:8)

当DataList受数据绑定时,尚未处理AutoPostBack,即ItemCreated事件中的值仍然是原始值。

您需要处理下拉控件的SelectedIndexChange事件。

答案 1 :(得分:0)

关于你的第二个问题:

我建议您从下拉列表中删除AutoPostBack,添加“更新”按钮,然后更新按钮Click事件中的数据。

该按钮可以保存Command和CommandArgument值,因此很容易与数据库记录关联。

答案 2 :(得分:0)

答案 3 :(得分:0)

感谢您的解决方案

 protected void ddlOnSelectedIndexChanged(object sender, EventArgs e) {
     try {
         ModalPopupExtender1.Show();
         if (ViewState["Colors"] != null) {
             FillColors(ViewState["Colors"].ToString());
         }

         DropDownList dropDownListColor = (DropDownList)sender;
         DataListItem dataListItem = (DataListItem)dropDownListColor.Parent;

         Image image = (Image)dataListItem.FindControl("mdlImage");
         Label ProductCode = (Label)dataListItem.FindControl("lblprdCode");
         Label ProductName = (Label)dataListItem.FindControl("lblProdName");
         DropDownList ddlQuantity = (DropDownList)dataListItem.FindControl("ddlQuantity");
         Label ProductPrice = (Label)dataListItem.FindControl("lblProdPrice");
         Label TotalPrice = (Label)dataListItem.FindControl("lblTotPrice");
         //Label ProductPrice = (Label)dataListItem.FindControl("lblProdPrice");
     } catch (Exception ex) {

     }
 }