(向下滚动到帖子底部以找到解决方案。)
有一个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;
}
答案 0 :(得分:8)
当DataList受数据绑定时,尚未处理AutoPostBack,即ItemCreated事件中的值仍然是原始值。
您需要处理下拉控件的SelectedIndexChange事件。
答案 1 :(得分:0)
关于你的第二个问题:
我建议您从下拉列表中删除AutoPostBack,添加“更新”按钮,然后更新按钮Click事件中的数据。
该按钮可以保存Command和CommandArgument值,因此很容易与数据库记录关联。
答案 2 :(得分:0)
一些MSDN链接与冒泡的C#示例
http://msdn.microsoft.com/en-us/library/system.web.ui.control.onbubbleevent.aspx
http://msdn.microsoft.com/en-us/library/aa719644(VS.71).aspx
http://msdn.microsoft.com/en-us/library/aa720044(VS.71).aspx
答案 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) {
}
}