2008-10-06 2 views
4

У меня есть ретранслятор, где в нижнем колонтитусе у меня есть DropDownList. В моем кодовом отставании у меня есть:DropDownList в Repeater control, can not fire SelectedIndexChanged

protected void ddMyRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item 
      || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     // Item binding code 
    } 

    else if (e.Item.ItemType == ListItemType.Footer) 
    { 
     DropDownList ddl = e.Item.FindDropDownList("ddMyDropDownList"); 
     // Fill the list control 
     ddl.SelectedIndexChanged += new 
      EventHandler(ddMyDropDownList_SelectedIndexChanged); 
     ddl.AutoPostBack = true; 
    } 
} 

На странице появляется PostBack, однако мой EventHandler не вызывается. Есть идеи?

+0

У вас это работает? если нет, опубликуйте дополнительную информацию: источник aspx, текущий код позади, .net-версия (1.1/2.0/3.5), версия vs.net (2003/2005/2008) – KyleLanser 2008-10-07 15:16:41

ответ

11

Если вы просто хотите, чтобы огонь OnSelectedIndexChanged, это то, как он должен выглядеть:

Page.aspx - Источник

<FooterTemplate> 
    <asp:DropDownList ID="ddlOptions" 
      runat="server" 
      AutoPostBack="true" 
      onselectedindexchanged="ddlOptions_SelectedIndexChanged"> 
     <asp:ListItem>Option1</asp:ListItem> 
     <asp:ListItem>Option2</asp:ListItem> 
    </asp:DropDownList> 
</FooterTemplate> 

Page.aspx.cs - Code-за

protected void ddlOptions_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     //Event Code here. 
    } 

И все. Больше ничего не нужно.

+1

Это не работает для меня. Событие никогда не срабатывает. – johnny 2009-01-28 17:00:13

+0

Работал для меня ... спасибо. – 2009-02-03 15:25:54

2

Я думаю, это потому, что вы, вероятно, не привязываетесь к обратной почте. Я не тестировал это, но попробуйте подключить этот код до события ItemCreated для вашего ретранслятора.

1

Является ли свойство AutoPostBack равным True в списках DropDownLists на стороне ASPX? Я знаю, что иногда это свойство не устанавливается первоначально, и это предотвратит запуск события SelectedIndexChanged.

+0

Я пробовал настройку AutoPostBack в разметке и код -за. – jwarzech 2008-10-06 20:04:14

1

В этом случае ваш родительский ретранслятор (ddMyRepeater) должен привязывать себя в page_load при каждой обратной передаче. Это единственный способ найти вложенные элементы управления для запуска своих событий.

Возможно, это не идеальный сценарий для вас. В зависимости от того, что делает ваша страница, вам может понадобиться дважды привязать этот элемент управления. Однажды, чтобы активировать события, и второй раз, если событие, вызванное увольнением, заставляет данные ретранслятора каким-либо образом меняться.

2

Я думаю, проблема связана с тем, что элемент управления dropdownlist находится не внутри репитера, а на нижнем колонтитуле. Я не думаю, что envent of the reperter срабатывает для элементов управления, которые находятся на нижнем колонтитуле. Вы должны попытаться вывести dropdowncontrol из репитера.

1

Убедитесь, что ViewState включен для DropDownList

5

Если DropDownList находится в пределах Repeater то, чтобы сделать огонь событие SelectIndexChanged, вам необходимо отключить EnableViewState на GridView/Repeater.

например.

EnableViewState="false" 

Вы также должны привязка к GridView/Repeater на каждом постбэка так DataBind его в методе загрузки страницы.