5

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

得到一个包含 Datalist 的 asp.net 页面。在这个数据列表中,有一个包含下拉列表的模板,每次数据列表填充一个项目时,都会调用一个 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-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; 
        }
4

4 回答 4

9

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

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

于 2008-11-23T17:28:09.097 回答
0

关于你的第二个问题:

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

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

于 2008-11-23T19:10:11.137 回答
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) {

     }
 }
于 2014-10-11T11:04:32.023 回答