(Чтобы найти решение, прокрутите сообщение вниз, чтобы найти решение.)
Получил страницу 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-странице, заключается в том, что мне нужно запустить тест 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;
}